1. 程式人生 > >C語言中的自增運算

C語言中的自增運算

main(){
int i=5,j=5,p,q;
p=(i++)+(i++)+(i++);
q=(++j)+(++j)+(++j);
printf("%d,%d,%d,%d",p,q,i,j);
}
請問各位P=多少
q=多少
它們為什麼會=於你們說的多少呢?

c語言對於這種執行的處理不是把i++或++j一個一個分開算的。
他是在算完p=(i++)+(i++)+(i++)之後才算3個i++的,也就是分析的時候不能把p=(i++)+(i++)+(i++)中的每一個i++分開來分析。整個式子算完後i++才生效。
同理算q=(++j)+(++j)+(++j)之前已經將3個++j算完了j變成了8,然後再算q=(++j)+(++j)+(++j)的,所以q=24;  



在彙編級只能實現兩個數相加,而不能實現三個數連加,所以先會計算出(++j)+(++j) 
 

但是它在不同的編譯器上會有不同的結果,避免寫這種運算! 
 

相關推薦

Java (++) 和 C語言的區別

%d 區別 但是 [] .cn cnblogs 微軟雅黑 自增 華麗 在Java、c語言等高級語言中自增和自減的作用基本一致,都是變量自身加一或減一。下面我只對自增進行說明,自減是類似的。 自增運算符(++),有兩種書寫形式,一個是在變量前: ++ num; 另一種

C語言++運算子後置時的使用說明(附C語言運算子優先順序表)

首先吐槽一聲:後置++運算子就是個坑!! 有學弟問我一道C語言題目,如下: int x = 11,則表示式(x++*1/3)的值是多少? 對答案這個先賣個關子,學弟老實明白的告訴我:答案不重要,就是感覺很糾結。 我很認真的思考,仔細的分析,然後用VS測試了一下,於是我

關於C語言減運算子的使用及注意事項

++是自增運算子,是單目運算子,其作用是使單個變數的值增1。它有兩種使用情況: 1)前置:++i,先執行i=i+1,再使用i值; 2)後置:i++,先使用i值,再執行i=i+1。 例如: j=3;k=++j; 執行“k=++j”語句後,k=4,j=4。上述語句等效為: j=

C語言的模運算-hdu6124(打表,找規律)

題目連結:https://vjudge.net/problem/HDU-6124 題目描述: 題目大意就是給你一個數,判斷這個數 % 其它數後共有幾種結果。 這題對我來說最大的難點是我不太知道每個數 餘 其他的數應該得出什麼結果,後來參考了別人的部落格,才弄清楚了。現在我就舉一些例子來說明一下:

關於c語言減的單輸出和多輸出的區別

先寫一個單輸出的樣式,分析他們的輸出方式和順序。 #include<stdio.h> #include<stdlib.h> void main() {

c語言定義了一個函式,在main呼叫時提示找不到識別符號

解決方案一: 把定義的函式放在,main函式之前。 void f() { printf("Hello"); } main() { f(); } 解決方案二: 在main函式之前宣告。 void f(); main() { f

C語言帶的標頭檔案(.h)所包含的函式

由於之前沒有好好學習過C語言,所以對其自帶標頭檔案所包含的內容總是不清楚,每次寫程式碼都是盲目的#include很多.h,現在重新整理一下,發現了不少很好的函式,以方便複習查閱。 不完全統計,C語言標

C語言

任務程式碼: #include <stdio.h> #include <stdlib.h><pre name="code" class="cpp">#include <stdio.h> #include <stdlib

c語言減練習

#include<stdio.h> #include<stdlib.h> int main(void){ int i=3; printf("%d,%d,%d,%

C語言的位移運算

位移運算 1.左移 //C左移表示式 x<<k;   對於一個n位的運算元x,x<<k操作會生成一個值:x向左移動k位,丟棄最高的k位,並在右端補k個0。位移量應該是一個0~n-1之間的值。   位移運算是從左至右可結合的,所以x

c語言減運算子的操作詳解

博主在回憶c語言的基本知識時,突然發現自增自減運算子(--、++)這個知識點有些模糊不清,故博主為了給同為小白的同學們提供一些經驗,特寫下這篇文章。 首先,自增自減運算子共有兩種操作方式。 比如,我先定義一個變數a,以“++”為例,共有“a++”、“++a”種操作方式。“下

c語言浮點運算的inf和nan錯誤

============================================ 作者:yuanlulu http://blog.csdn.net/yuanlulu 版權沒有,但是轉載請保留此段宣告 ===============================

C語言減運算子問題

C語言的自增++,自減--運算子對於初學者來說一直都是個難題,甚至很多老手也會產生困惑,最近我在網上看到一個問題:  #include <stdio.h>  void main() /*主函式*/  {  int a,b,c,d;  a=5;  b=5;  c=(

C語言的位運算

        在很多系統程式中常要求在位(bit)一級進行運算或處理。C語言提供了位運算的功能, 這使得C語言也能像組合語言一樣用來編寫系統程式。━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 操作符 作用 ────────────────────────────

C語言運算

main(){ int i=5,j=5,p,q; p=(i++)+(i++)+(i++); q=(++j)+(++j)+(++j); printf("%d,%d,%d,%d",p,q,i,j); } 請問各位P=多少 q=多少 它們為什麼會=於你們說的多少呢? c語言對於這

C#語言數據的運算

double int 運算 數字運算 double類型 數據 數字 語言 字符 1、數字運算:數字與數字的運算 支持運算:加(+)、減(-)、乘(*)、除(/)、求余(%) 返回運算:與運算類型相同 (1)int類型的數據與int類型的數據運算,返回運算是int類型; (2

常見位操作及運算應用舉例:1,C語言位運算子異或“∧”的作用2,異或運算的作用3,&(與運算)、|(或運算)、^(異或運算

  1 C語言中位運算子異或“∧”的作用: 異或運算子∧也稱XOR運算子。它的規則是若參加運算的兩個二進位同號,則結果為0(假);異號則為1(真)。即0∧0=0,0∧1=1,1∧1=0。如: 即071∧052,結果為023(八進位制數)。 “異或”的意思是判斷兩個相應的位值是否為“

C語言之賦值運算型別轉換的陷阱!

    在用C編寫微控制器的程式時,在採集處理資料時,總會出現一些不正常的資料。經過數次的排查,發現大部分的問題都出現在賦值時的型別轉換問題上。C語言在賦值時的型別轉換問題是很隱蔽的,經常性地會被忽略,而這又會導致致命性的錯誤。弄清楚C語言的型別轉換的規則,至關重要!

c語言使用帶的qsort(結構體排序)

c中沒有自帶的sort函式emm 不過有自帶的qsort函式 (其實用法都差不多(只是我經常以為c中有sort 標頭檔案要用  1 #include <stdlib.h>  一定要重新把指標指向的值賦值給一個node型別,不然比較不了 1 struct node{ 2 int d,i

C語言庫函式帶的排序函式qsort

之前一直不知道C語言還有預設的排序函式,而且還是快速排序的函式,當時覺得自己C語言白學了,瞭解之後我覺得應該把這個函式的用法和用例展示出來,供大家參考。 #include <stdlib.h> void qsort( void *buf, size_t num,