⑴ c語言的運算符問題,前置運算和後置運算我搞不清楚
unsignedcharj,k,i=255;
j=i++;
k=++i;
在上述代碼中,後置自增自減運算符是在執行完賦值後再執行的,也就是相當於
j=i;
i=i+1;
而前置自增自減運算符是在賦值前執行的,也就是
i=i+1;
k=i;
因此,j的值應該是255,k應該是1。
#include<stdio.h>
intmain()
{
unsignedcharj,k,i=255;
j=i++;
k=++i;
printf("j=%d,k=%d ",j,k);
return0;
}
前置自增自減運算符和後置自增自減運算符放在一起運算時該怎麼判斷呢?
inta=0,b=0,c=0;
a=++b+c++;
先執行前置自增自減運算符,再執行賦值,最後執行後置自增自減運算符
inta=0,b=0,c=0;
b=b+1;
a=b+c;
c=c+1;
非常重要的一點!
inta=0;
printf("%d,%d",++a,++a);
這段代碼嚴格來說是錯誤的!
因為【參數求值順序】是【未定義】的。
參考CSDN這篇帖子:
http://bbs.csdn.net/topics/370153775
⑵ c語言中前置++、後置++、前置--、後置-- 哪位大神可以幫我解釋一下
關於前置++和後置++的區別,你可以看看我寫的網路經驗。裡面有詳細的深入分析,以及結論。
http://jingyan..com/article/9f63fb919997f3c8400f0efb.html
前置--和後置--與++是一樣的,除了加1和減1的區別外,其他都一樣。
⑶ c語言中運算符有哪幾種,優先順序順序是怎樣
C語言中,運算符除了常見的三大類,算術運算符、關系運算符與邏輯運算符之外,還有一些用於完成特殊任務的運算符。
運算符的運算優先順序共分為15 級,1 級最高,15 級最低。 在表達式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的運算符 優先順序相同時,則按運算符的結合性所規定的結合方向處理。
一級運算符:標識,常量,字元串文字量,優先順序提升表達式最優先執行。
二級運算符:數組下標運算(expression)、函數調用(argument-expression-list)、成員訪問(identifier、-> identifier)、後綴自增(i++)、後綴自減(i--)、復合初始化(initializer-list)。
三級運算符:前綴自增(++i)、前綴自減(--i)、單目轉型表式式(取地址& ,提領 * , 正號+ ,負號-、位反~ 邏輯否!)、求類型長度(sizeof unary-expression)。
四級運算符:強製表達式成為type-name指定的類型( type-name ) cast-expression。
五級運算符:「 * 」 乘法運算符。
六級運算符:「 + 」加法運算符。
七級運算符:<< 左移運算符;>> 右移運算符。
八級運算符:<、<=、>、>=關系運算符。
九級運算符:「 == 」等於運算符;「 != 」不等於運算符。
十級運算符:「 & 」按位與運算符。
十一級運算符:「 ∧ 」按位異或運算符。
十二級運算符:「 | 」按位或運算符。
十三級運算符:「&&」邏輯與運算符。
十四級運算符:「 || 」邏輯或運算符。
十五級運算符:? :條件運算符。
(3)c語言的後置運算符擴展閱讀
C語言中各運算符的結合性:
1、左結合性(自左至右):
例如算術運算符的結合性是自左至右,即先左後右。如有表達式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。這種自左至右的結合方向就稱為「左結合性」。
2、右結合性(自右至左)
自右至左的結合方向稱為「右結合性」。最典型的右結合 性運算符是賦值運算符。如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z)運算。C語言運算符中有不少為右結合性,應注意區別,以避免理解錯誤。
⑷ C語言自增運算
++是自增運算符,++k或k++都是讓變數k的值加1;-
-是自減運算符,-
-k或k-
-都是讓變數k減1。運算符位於操作數之前,稱為前置運算符;運算符位於操作數之後,稱為後置運算符。
這兩種運算符的差異是:前置運算符是對變數先遞增(遞減),然後參與其他運算,即先改變變數的值後使用;後置運算符則是變數先參與其他運算,後對變數遞增(遞減),即先使用後改變。
比如:int
a=9;
b=a++;(b=9;a=10)
b=++a;(b=10;a=10)
對於你的這道題來說,++i和i++都是一樣的;因為都是改變i的值。
還有,printf("%d\n",sum)少寫了一個「;」,應該是printf("%d\n",sum);
希望對你有所幫助!
⑸ 在C語言中s[j++]和s[j],j++有什麼區別
1、效果是一樣的,前者是後者的簡化。s[j++]:先執行s[j],然後立馬再把j自加一。也就等同於連接著的兩條語句s[j],j++的效果。
2、C語言的前置++和後置++,稱為自增運算符
前置--和後置--稱為自減運算符,下面以自增運算符的區別來加以介紹,自減類似
如果單獨寫 自增運算符為一個語句,二者沒有區別
++i; 和 i++; 都是讓i+1賦值給i
但是如果把自增運算符寫入到另外表達式中二者就有很大區別了
⑹ 關於運算符中置轉後置,C語言高手進!
好麻煩的東西啊
⑺ C語言追加50求解 自增前置運算符和後置誰的優先順序高啊,怎麼試一下。
後置的優先順序高
可以這樣實驗: 編譯器里測試:
int i=0;
++i++;
因為++i返回i,是個左值,i++返回臨時值是個右值,如果可以通過編譯,那麼就是前置++優先順序高,如果通不過編譯(右值不可以修改),就是後置優先順序高
實際測試,通不過編譯(vc2015)
寫成:
(++i)++; //這樣就可以通過編譯
⑻ c語言前置運算符和後置運算符的區別
前置先計算 自增、自減
inti=0;
intj=++i;//j=1,i=1
i=0;
j=i++;//j=0,i=1