簡單的C語言的問題,問一下,乙個簡單的C語言的問題,問一下

時間 2022-04-09 19:40:16

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我...

和心理有關的問題,想問一下,乙個和心理有關的問題,想問一下

現在的我和你一樣,對什麼都好像無所謂一樣,不過我覺得看一些勵志的電影,書,在短時間內有點用的,但要堅持就要看個人的意志力了。這其實乙個正常現象,關於討論人活著的意義自古有之,觀點很多。我個人理解是你主要是沒什麼目標,最好是你能找乙個目標。可能是因為最近的事情太多了,都麻痺了 心理問題只有自己調結,難...