C語言中,a=b=c,a=b==c,a==(b=c),a==(b==c)有什么區別
首先謝謝樓主,這個問題真好!我剛才的回答錯了,現在刪了重答,不過執行的結果還是3,1,0,0 這個我實際操作過了。
首先=和==的意思樓上各位已經說的很清楚了,一個是賦值,一個是判斷,==的優先級高于=,==兩邊的值若相等,則判斷為真,整個表達式的值為1,否則為0。這是前提,下面來看這個問題。
剛才我的錯誤在誤以為printf函數是自左向右執行,就像我們的書寫習慣一樣,不過實際不是。由于printf執行參數輸出時是壓棧操作(為了支持不定個數的參數的輸出,故從后向前執行),所以會先對最后一個進行操作,也就是從右向左輸出(臉紅,老師貌似也講過,不過。
悔不該當初啊)。所以整個printf執行步驟如下:第一步是最后一個a==(b==c),b是2,c是3,明顯不等,所以b==c的值是0,然后a是1,和0又不等,所以整個式子值為0;第二步為倒數第二個,a==(b=c),先將c賦給b,此時b和c都為3,再判斷a與b是否相等,a為1,不等,整個式子為0;第三步:a=b==c,經過上一步,此時b和c都為3,所以判斷b==c為真,值為1,然后將1賦給a,輸出a,就是1;第四步:a=b=c,自右向左,先將c值賦給b,再將b值賦給a,輸出a,即為3,結果3,1,0,0。
這個題目告訴我們上課一定要認真聽講(再次臉紅)。累死我了。
C語言中 a=b==c怎么理解
“=”是賦值符,把c的值賦給b賦給a,最后a、b、c的值都相等,“==”是判斷符;
=賦值==等于運算說a=b=c,表達式運行a值賦給b、c運行完abc值相等;
a=b==c,復合表達式先a值賦給b與c比較相等則返0,否則返非零值;
運算b==c,若b與c相等,那么得出的值為1。
擴展資料
c語言中a=b--<=a||ab!=c的計算
左邊:(a=b--)<=a;
計算b--的值,b--的值為2,得到這個值也就讓b的值變成了1,賦值給a后a的值為2,(a=b--)的值也就是a的值為2,2<=2成立,所以左邊為真;
右邊:(a+b)!=c,a+b的值為3,c的值為3,所以右邊為假真||假的結果為真;
b--使b的值變成了1;
a=b--的賦值使a的值變成了2;