1樓:匿名使用者
&&的特點是,只要左右表示式有一個為0,則整個表示式為0,並且&&的運算順序是從左向右,
所以如果&&的左表示式為0,則不會再計算右表示式,直接將整個表示式返回0,這個又叫&&短路
所以當b=0時,不會再處理a--,直接b&&a--返回0了,所以a值不變
而當b=1時,還要再根據右值是否為0才能判斷整個表示式的值,所以會再處理a--,所以a值為1
2樓:匿名使用者
&&運算子的短路效應
我們知道&&運算子相當於邏輯運算子 且
也就是說,只有&&兩側都為真(也就是非零)時,這個表示式的結果才為真(一般預設是1)
那麼假如&&左側就是假(0)了,那麼整個表示式可定就是假(0)了,右側的當然也就沒有必要去判斷、執行了
類似的 || 運算子也有同樣的效果
3樓:
首先, 邏輯與運算子&&有一個特徵叫 「短路求值」,即從左往右運算的過程中,如果表示式的值已經確定,則不會計算剩下的表示式。
c=b && a-- 這個表示式中 b的表示式如果不成立,即&&的前半部分已經為假,整個表示式的值也是為假,所以後面的a--的語句就沒有執行。
相反 b的表示式成立的情況下, &&的前半部分為真,整個表示式的值還不能確定,還依賴於a--的值。所以a--的語句執行後就a就等於1了。
除了&&,邏輯或運算子 || 也有這樣的特點
4樓:匿名使用者
c=b&&a-- 因為b=0,是false,不執行&&後面的a--,所以a沒變
c=b&&a-- 因為b=1,是true,執行&&後面的a--,執行後,a自減1,所以a=1
int a=2,b=0,c=0;執行語句c+=b&&a--後a的結果為?c的結果為?
5樓:
#include
int main()
執行結果為:
a=2c=0
分析如抄下:襲
因為c+=b的邏輯值為0,那麼不管a--是真還bai是假du,整個表示式的值都是zhi假,而c語言的dao處理是直接略過a--了,即不執行a--操作了,所以a的值輸出還是2。
大學c語言問題 執行「int a,b,c;a=b=c=1;--b&&++c||++a;"後,變數a
6樓:我才是淡淡
|,首先你要把整個結構弄清楚,&&的優先順序高於||,所以上面的式子等價於(--b&&++c)||(++a),
先看(--b&&++c),--b導致b的值為0,所以(--b&&++c)必然為假,所以c就不會加一了,c的值還是1。然後(--b&&++c)為假並不能直接斷定(--b&&++c)||(++a)的真假,因為||需要兩邊為假才是假,所以需要判斷右邊的(++a),這裡a自加一次變為2,(++a)為真,整個表示式(--b&&++c)||(++a)的值為真。最後a,b,c的值分別是2,0,1
7樓:
你的**是順序結構;
所以執行的時候是先對a進行賦值,也就是a=1;
至於後面對b和c的運算,並不能改變a的值。
第一步 int a,b,c;
第二步 a=b=c=1;
第三步 --b&&++c||++a;//這個地方只有++a能改變啊的值 b和c對a的值不影響
第四步輸出a的值;
8樓:益達是誰
這判斷式a,b,c應該是2-0-2啊,怎麼是201,還有我想問這式子對嗎
9樓:匿名使用者
答案應該是2 1 1
C語言 假定a 1,b 2,c 3,d
int a 1,b 2,c 3,d 4 if a 2 b 1 c 2 a 2表示賦值2給a,同時檢查結果2是不是真,當然是,所以又檢查b 1,b 1 同上,結果也是真,所以執行c 2 if c 3 d 1 a 5 c 2!3 d 4 1,所以不執行a 5 printf d,d,d,d n a,b,c...
設S為ABC的面積S根號3 4(a 2 b 2 c 2)求C的大小,和sinA sinB的最大值
餘弦定理有 a 2 b 2 c 2 2abcosc,代入s,有 s 根號3 4 2abcosc 同時,s 1 2absinc,所以,根號3 4 2abcosc 1 2absinc,tanc 根號3,所以c 60度。sina sinb sina sin 120 a 2sin60cos a 60 這步是...
c語言若有定義語句int b2則表示式b《2b 的值是
我感覺這題答了以後 採納率又會下來。2 的二進位制形式 0010 b 2 1000 8 3 b 3 2 1 所以最後的表示式的值就是 8 至於你說的為什麼3 b 1.首先你得分清 與 運算。是按位或 就是你說的 011 010 後結果為 011 而在 的世界裡,只認兩個值 0 和 1。即真和假 所有...