1樓:匿名使用者
a=b=c=1;//已經賦值1給了c
對於++a||++b&&++c;
這個語句按理說是先分別執行a,b,c三個變數的自加,然後按||和&&從右到左的結合順序,先做b&&c,然後再 a || (剛才的結果),但是:
c語言做了優化,這個語句先執行++a;由於後面接著的是||,也就是說最後結果是看 a||(其它運算的結果),所以,不管括號中的是什麼結果,如果aa本身是不為0(也即true)的,結果都是1(對不?!)。而恰好此時a已經為2了,所以執行以後,它就不再計算括號中的步驟,而直接返回1(儘管這個結果沒有任何作用)。
我是通過c51編譯這段小程式,觀察它的彙編結果後知道的,我也學習了一下。
1 #include
2 void main()
30000 750000 r mov c,#00h
0003 750001 r mov c+01h,#01h
;---- variable 'b' assigned to register 'r6/r7' ----
0006 7f01 mov r7,#01h
0008 7e00 mov r6,#00h
;---- variable 'a' assigned to register 'r4/r5' ----
000a 7d01 mov r5,#01h
000c 7c00 mov r4,#00h
; source line # 6
000e 0d inc r5
000f ed mov a,r5
0010 7001 jnz ?c0005
0012 0c inc r4
0013 ?c0005:
0013 4c orl a,r4
0014 7010 jnz ?c0001
0016 0f inc r7
0017 ef mov a,r7
0018 7001 jnz ?c0006
001a 0e inc r6
001b ?c0006:
001b 4e orl a,r6
001c 6008 jz ?c0001
001e 0500 r inc c+01h
0020 e500 r mov a,c+01h
0022 7002 jnz ?c0007
0024 0500 r inc c
0026 ?c0007:
0026 ?c0001:
; source line # 7
0026 7bff mov r3,#0ffh
0028 7a00 r mov r2,#high ?sc_0
002a 7900 r mov r1,#low ?sc_0
002c 8c00 e mov ?_printf?byte+03h,r4
002e 8d00 e mov ?_printf?byte+04h,r5
0030 8e00 e mov ?_printf?byte+05h,r6
0032 8f00 e mov ?_printf?byte+06h,r7
0034 850000 e mov ?_printf?byte+07h,c
0037 850000 e mov ?_printf?byte+08h,c+01h
003a 120000 e lcall _printf
003d ?c0002:
; source line # 8
003d 80fe sjmp ?c0002
2樓:鼻行動物
執行不到 &&++c的那段**。c和c++都是遵循最短路原則的。意思是,如果可以從當前邏輯判斷式判斷出結果,它是不會執行後面的內容的,例如,++a||++b&&++c;++a=2>1已經可以判斷出此邏輯判斷為1,所以根本不需執行後面的。
3樓:付強
++a 執行成功後,++b&&++c 就不執行了,所以c的值不變。
4樓:匿名使用者
因為++a||++b&&++c相當於(++a)|| (++b&&++c)。當執行完++a時,系統發現結果為真,所以就不往下執行了。也就說++c沒有被執行。所以c還是為1。。。
5樓:
a=2,b=1,c=1
應為++a||++b&&++c只執行++a,
比若說 a||b,如果a為真,編譯器就不會執行b
6樓:
執行到第六行,或只有乙個為真即可, a,值為真,不再執行以後的,所以 c沒有執行,c的值不變。
C語言求解釋一下語句,C語言求解釋一下乙個語句
第乙個else if簡單來說就是當c不等於32 也就是空格符號 的時候,判斷其是否是字母 a z 即是否在a z之間,後面同理 a 相當於ascii碼65,即 a 就是65.因為直接看65不能直觀的看出字母是a,所以寫成 a 就直觀了。for 當滿足條件是執行for語句塊 一直執行到不滿足是停止 i...
簡單的C語言問題,乙個簡單的C語言問題
c語言中 的優先順序是最高的!強制型別轉化比它低,所以第乙個a 3好理解 a int double 3 2 0.5 int 1.99 2 a int double 1 0.5 int 1.99 2 a int 1.5 int 1.99 2 a int 1.5 1 2 a int 3.5 a 3vb我...
和心理有關的問題,想問一下,乙個和心理有關的問題,想問一下
現在的我和你一樣,對什麼都好像無所謂一樣,不過我覺得看一些勵志的電影,書,在短時間內有點用的,但要堅持就要看個人的意志力了。這其實乙個正常現象,關於討論人活著的意義自古有之,觀點很多。我個人理解是你主要是沒什麼目標,最好是你能找乙個目標。可能是因為最近的事情太多了,都麻痺了 心理問題只有自己調結,難...