A. c語言優先順序的題目,如下圖52題
C是正確的
對於A
a*b/a*b從左到右計算 結果是b*b
對於B
a/b*b由於整型可能會捨去一部分 所以這個已經不一定是a了 再除以a可能為0
對於D和B是類似的
只有C
a/b*b得到的是a/b的整數部分 乘上b
而a%b是余數
相加結果是恆為a的
B. C語言優先順序的題目
a!=b=1
m=1
b>c=0
n=0
1&&0=0
C. c語言優先順序問題
不是呀,i++的定義和i=i+1是完全不同的兩個概念
你說的那個是++i。i++的意思是在執行一遍賦值語句後i才自動加1
二++i 是沒執行語句前i就自動加1了!
D. c語言優先順序題目
4.000000
E. c語言符號優先順序測試題
printf("%d\n",*p++);相當於取*p列印然後再p++:printf("%d\n",*p); p++;會輸出20
printf("%d\n",++*p);相當於printf("%d\n",++(*p));由於前句p的位置已經後移執行a[2],所以會輸出31
F. C語言優先順序問題
num++是在運算結束後才+1的
所以上面等同於
a+b-a-b
結果等於0
G. 關於C語言運算符優先順序題目
選擇C,沒錯!
H. c語言優先順序的一道題
y=y+(y=y-(m=m*y))
y=y+(y=y-(m=5*2))
y=y+(y=y-10)
y=y+(y=2-10)
y=y+(-8)注意此時y已經變為-8
y=-8+(-8)
y=-16
(a=4*5,a*2),運行此句之後a=20,第二個表達式值是40但因為它並沒有賦給任何變數,對a的值並無影響
a+6=20+6=26
I. 求解一道c語言關於符號優先順序的基本題
能想到這已經算是入門了。。。
這是編譯器的原因,C++的編譯器在同時處理!和++時會有一些混亂
b=!b++;以下是本條指令的匯編指令
0040163B mov eax,dword ptr [ebp-0Ch]從存儲器取出b(!運算)
0040163E mov ecx,dword ptr [ebp-0Ch]從存儲器取出b(++運算)
00401641 add ecx,1 b自增(++運算)
00401644 mov dword ptr [ebp-0Ch],ecx 將b存回存儲器(++運算)
00401647 test eax,eax 邏輯取反(!運算 )
00401649 jne main+84h (00401654)
0040164B mov dword ptr [ebp-14h],1
00401652 jmp main+8Bh (0040165b)
00401654 mov dword ptr [ebp-14h],0
0040165B mov edx,dword ptr [ebp-14h] 運算結果賦值(=運算)
0040165E mov dword ptr [ebp-0Ch],edx 運算結果存回存儲器b(覆蓋掉了++運算的結果)
可以看出來在b=!b++中++對於最終b的取值沒有任何影響
get(a,!a++);以下是本條指令的匯編指令
004015EF mov eax,dword ptr [ebp-4]//首先運算!a++
004015F2 mov ecx,dword ptr [ebp-4]
004015F5 add ecx,1
004015F8 mov dword ptr [ebp-4],ecx
004015FB test eax,eax
004015FD jne main+38h (00401608)
004015FF mov dword ptr [ebp-10h],1
00401606 jmp main+3Fh (0040160f)
00401608 mov dword ptr [ebp-10h],0
0040160F mov edx,dword ptr [ebp-10h]//以上都是在運算!a++,並將運算結果存於edx中,但是可以發現現在存儲器中的a的值已經發生了改變,變為a+1
00401612 push edx//將!a++的結果壓棧(C++中函數的參數的調用是通過棧來實現的,主函數將參數壓棧,被調用函數將參數出棧)
00401613 mov eax,dword ptr [ebp-4]//從存儲器讀取a(實際上值已經變為a+1)
00401616 push eax//將a壓棧(將a+1壓棧)
00401617 call @ILT+345(get) (0040115e)//調用函數
0040161C add esp,8
printf()的調用過程也與這個函數類似,可以看出最終get(a,!a++)實際上調用到的是get(a+1,!a++),這也就是為什麼後者顯示為2 0的原因了
J. C語言關於優先順序的小題,如下:
因為!的優先順序比&&優先順序高,而i++是先求表達式再自加的,因此應先執行與i有關的表達式,也就是ch&&i,但是!的運算符高於&&,因此先執行!ch,因為ch的值為非0,那麼!ch之後值就為0,而對於邏輯與運算採用的規則是短路運算規則,也就是說如果&&左側的值為0的話,那麼右邊的表達式就不用計算了,因為不管右邊表達式的值為多少,他與0進行邏輯與&&的結果都為0,因此只要左邊的值為0,就沒必要計算右測的表達式。因此,本例中右側的表達式i++根本就沒有執行。所以i的值還是為1。