C語言自增
❶ c語言自增自減
在表達式里,像題目這種++,--。在變數前面就是先自增自減再取變數值。在變數後面先取變數值再自增自減。
比如:j=i++;意思就是先取i的值賦值給j,以後i再自增。後面代碼也是這個意思。你可用這個思路跟著代碼走一遍。
❷ C語言自增自減運算符
樓上說的對,單主要還是要看While的語句,才是循環條件,題目種的,do執行的b的±,while執行a的±,只看a就行,
循環一次a加1,加到0結束循環。
所以a的初值一定要是負數,才有可能加到0,不然死循環
-2可以循環2次,
❸ c語言自增自減問題
我不知道你的程序功能是什麼,不過這兩個循環的執行次數明顯不一樣,saw2的是255-0,saw的是0-254。你再檢查看看
========================================
水晶說得沒錯,uchar是無符號的char型,不存在負數,數值小於0的時候就會變成255。所以一直死循環。
❹ c語言自增
因為這依賴於具體的編譯軟體,不同的便衣軟體有不同的自己的規定,而用戶卻往往被蒙在鼓裡。即使用戶自己搞清楚了某一種變音軟體的運算規則,但是確實的編寫好的程序缺少了可移植性,和可讀性。如果拿到別的編譯軟體上進行編譯,就會得出不同的結果,所以說像這種有歧義的語句,最好的辦法是敬而遠之,把它拆分為兩個語句或多個語句就可以了。
❺ c語言自增自減
不是
第二個之所以結果是x=17,y=17是輸出函數的問題,
printf("x=%d,y=%d\n",x,++x);
先算x,再算x++;當他做完
x++時改變了x的值,結果要輸出x的值時輸出了17,並不是因為先算x++;
運算符自左向右或自右向左是指多個操作數的情況,如
+是自右向左運算的,a+b+c是先算b+c在將其結果與a相加,而不是向我們平常那
樣a+b在將其結果與c相加
很明顯的一個例子是
int x=5;
cout<<x+(++x)<<endl;
結果是12,而不是11,因為它先運算了++x,此時x已經變為6了,若從左向右,
則結果是11
❻ c語言自增自減問題。
函數參數的求值順序是自右向左」更是大錯特錯。樓主,C語言跟大多數語言一樣,沒有規定表達式的求值順序,除了以下幾個順序點:
;(分號,標志一條語句結束)
,(逗號操作符,函數參數列表裡面的逗號只起分隔作用,不是逗號操作符)
&&和||(邏輯與,邏輯或)
? : (條件運算符)
()(if,while,for, do..while,以及函數調用)
這些統稱為順序點,它們的求值順序有規定。我這里只給你說明逗號操作符,其他的不一一作介紹(不然能寫一大篇呢),你自己參考相關資料。
逗號表達式最簡單的情形如下:
exp1, exp2;
C語言保證exp1在exp2之前求值,並且exp1求值的副作用保證在逗號之前生成。所以象下面這個逗號表達式:
int i = 1;
i++, (i == 2);
最後的值就是1,因為逗號表達式的前半部分i++的副作用(i自增1)在逗號之前已經生成,所以當執行到(i == 2)的時候,i的值已經是2了,所以i == 2成立,(i == 2)的值便作為整個逗號表達式的值。
但是,對函數原型,函數定義,函數調用,C語言裡面明確說明,參數列表裡面的逗號不是逗號操作符,只起到分隔作用,所以這里的逗號不再是一個順序點,那它前後的表達式的求值順序就是任意的,並且所有帶副作用的表達式的副作用都要等到下一個順序點之後才是確定的,也就是說你只有等到下一個順序點之後,你才能准確得依賴這些表達式產生的副作用。
所以,像這樣的函數調用
foo(i++, ++i);是得不到准確的結果的。因為這里逗號不是逗號操作符,所以就算編譯器選擇的是從左到右的求值順序,由於C語言不再保證i++的副作用在逗號之前生成,算到++i的時候,都不確定i到底有沒有自增1,不確定性就在這里產生了。再者,如果編譯器選擇的是從右到左求值,同樣產生不確定性,這樣一來,傳進函數foo的兩個參數的值就可能不同,那麼最後的結果當然也就不同了。你這里一樣,printf是一個函數,
printf("%d,%d,%d\n",++i,--i,-i++);
是函數調用,括弧內的所有逗號都不是逗號操作符,而只起到分隔參數的作用。所以++i,--i,-i++這三個表達式的求值順序是任意的,編譯器想怎麼算就怎麼算,不同的編譯器的「想法」可能相同可能不同,結果就可能一樣可能不一樣。這才是樓上的各位得到不同結果的真正原因!!!
樓主要好好參考順序點的定義和作用,並且牢記下面這條規則:
C語言裡面明確指出:在兩個順序點之間兩次改變同一個變數的任何嘗試得到的結果都是不確定的!
你這里
int i=10;
printf("%d,%d,%d\n",++i,--i,-i++);
的兩個順序點分別是int i=10;的分號,和包圍printf的參數的括弧,C語言只保證位於兩個順序點之間的表達式求值產生副作用在第二個順序點之前生成,但不保證兩個順序點之間所有表達式的求值順序。你這里++i,--i,-i++三個表達式企圖在兩個順序點前一個分號和()之間三次改變同一個變數i的值,所以結果註定是不確定的。至於為什麼C語言要規定相鄰順序點之間的表達式以任意順序求值,是為了給編譯器更多的自由空間,讓底層運算操作能由編譯器調度安排從而使運算更有效地執行。
另外,站長團上有產品團購,便宜有保證
❼ C語言自增的運算過程親求解
這與編譯器有關。常見的有兩種情況:
b = ++j + ++j + ++j ; 的計算是先計算前2項存入一個臨時變數,再計算最後一項,結果是j=4+1,j=5+1,x=j+j=6+6=12;然後,j=6+1,b=x+j=12+7=19。
j=4+1,j=5+1,j=6+1,然後,b=j+j+j=7+7+7=21。
所以建議你不要糾結這種題。
❽ C語言 自增運算符
++i先加1再用i的值,i++先用i的值再自增1
❾ C語言自增變數條件
沒有要求.
有符號,無符號,或者字元型.
進行運算的話,實際上都是 加 1.
❿ C語言自增自減
++i;
是先i=i+1;,然後再取i的值輸出
i++;
是先取i的值輸出,然後再i=i+1;
負號的優先順序比++高,所以i先變-i,也就是-8,所以輸出-8,然後再進行i=i+1;