1樓:匿名使用者
x為1, y和z不變 為0.
一、 根據運算子優先順序 &&要高於||
所以 這個表示式等效於
++x||(++y&&++z)
二、 雖然&&優先順序要高,但並不代表要先計算右側的&&, 而是右側是一個整體。
在計算的時候還是從左到右掃描的。
先計算++x, x先自加為1。
於是等效於
1||(++y&&++z)
三、 根據短路運算,當||左值為1時,右值是1還是0已經不影響最終結果了。所以右值不參運算
於是右側的++y&&++z不會被執行。 y和z還是原始值0.
四、 綜上, 執行後x=1, y=0, z=0.
五、 編寫如下程式驗證:
#include
int main()
最終輸出1 0 0. 驗證了結論。
2樓:匿名使用者
於|只有x的值增加了1,其餘值沒有變
原因是,由運算子優先順序可知原表示式等效於
++x || (++y && ++z)
然後又由於||運算子的短路效應,顯然子表示式++x的值為非零,所以||右側的表示式沒有必要在去執行
故而只有x自增了1,其餘值沒有改變
3樓:匿名使用者
x,y,z分別為:1 0 0 ;當++x為1之後,||的結果已經確定為1,後面的++y和++z不再執行,所以執行後xyz的值分別為1,0,0
4樓:
x = 1,y =1, z =1
reason: 首先 判斷(++i)就會計算++i 得到 1. 然後 返回值1 為真
然後判斷(++y && ++z),分別計算++y和++z得到 1和1
5樓:hellow小清
x=1;y=0;z=1;
因為先算x,x自加等於1;或預算遇到1 就是短路運算,所以y不運算=0;因為&運算左邊是1所以要計算右邊的表示式所以z=1;
總結:或運算遇到0為短路運算;
與運算遇到1為短路運算
執行下列語句,y值: int x,y,z; x=y=z=0; ++x||++y&&++z; 求解釋
6樓:ru惡魔獵手
以|#include
void main()
7樓:匿名使用者
因為++x後等於1,根據||前為1就可忽略後面的運算,所以算到x=1就終止運算了。
8樓:匿名使用者
z=0;
y=0;
x=0;||
9樓:匿名使用者
a=++z;
b=++y;
c=++x;
c||(a&&b);
10樓:匿名使用者
嗯,,它的正確答案是1.1.1
請問c語言t=++x||++y&&++z這句話是什麼意思?
11樓:秋天
c++x||++y&&++z
++x = 2 , ++y = 2 , ++z = 1(++x||++y)&&++z,可以來
這樣來分源,前面因為++x=2 所以擴號的值bai是1
1&&++z = 1&&1=1
這些都是邏輯判du斷,不要去理會具體zhi等於多少,只要dao看它等於0還是等於1就可以了
c語言中 int x=5,y=5,z=5;執行語句x%=y+z;後x的值是多少?
12樓:匿名使用者
因為%=運算
符的優先順序copy低於+,所以
bai,先算y+z = 5+5=10
x %= y+z ; x %= 10 ; x= x%10=5%10=5
%=表示取模後,結果du還賦值給左zhi變數%表示模運dao算,即:整除取餘數。
在c語言中,設x,y,z,t均為int型變數,則執行以下語句後,t的值為( ) x=y=z=1; t=++x||++y&&++z;求過程。
13樓:匿名使用者
x=y=z=1; //首先執行這一句:把1賦值給z,再把z的值給y,再把y的值給x x,y,z的值都等1
t=++x||++y&&++z; //在這一條語句中,賦值號=的運算級別最低,因此先算++x||++y&&++z
//先算++x後x=2 表達為 x||++y&&++z//++y 後 y=2 表達為 x||y&&++z//++z 後 z=2 表達為 x||y&&z 再運算y&&z因為&&比||運算級別高 運算後為邏輯真即 1 表達為 x||1 運算得到邏輯真 即為1
//最後把1賦值給t=1
如果對你有幫助請設定為最佳答案謝謝
c語言 ++x||++y&&++z
14樓:左左強強峰峰
邏輯運算而已,用於判斷;
1,++x||++y&&++z
先給x + 1,若等於0,計算右邊,分別給y和z +1後若不為0整個表示式不為0,若x +1不等於0則不計算右邊的表示式;
2,++x&&++y&&++z
先給x +1, 若不等於0,計算右邊,給y +1若不等於0,計算右邊,給z +1若不等於0表示式不等於0;否則整個表示式為0;
3,x++&&--y&&z--||--x
先看x 是否為0,如果不為0,x +1;計算右邊,先給y-1,若不為0,計算右邊,判斷z是否為0,不為0,表示式(x++&&--y&&z--)值為1,z-1;右邊不用計算了;若z為0,z-1, 右邊先給x-1若不為0整個表示式為1,若為0整個表示式為1;
15樓:滄海雄風
因為「左結合律」和「 短路求值 」。
c語言保證邏輯運算的求值順序是從左往右的。
用括號顯示優先順序是這樣的:
(++x) || (++y && ++z)個人覺得,在不影響語意的前提下,把運算過程看成這樣∶(1 && ++x) || (++y && ++z)c中對於邏輯或的運算是隻要第一個表示式為真,就不會去算後面的表示式了
16樓:
這樣分解:++x||++y&&++z , 這個表示式中++x 與 ++y&&++z 兩者構成「或」表示式。或表示式中兩者有一個為真,表示式即為真。
在c中,對於或表示式,當第一個表示式為真是,就可以認為真個表示式為真,沒必要去計算後面的表示式的值。
如果你真的想要知道到底是為什麼?計算機為什麼要這樣做。建議你看看編譯原理中的表示式的翻譯方案,你就會懂的。
17樓:匿名使用者
首先從c語言運算子優先順序來看, && 高於||
所以上面表示式相當於 ( (x>=2 && y<'z') || !y)) 就是((1 && 1) || 0) , 最後就是(1 || 0)=1
18樓:宋文婷
|答案是c
x>z && y < 'z' || !y把變數替換就是45 > 0 && 'a' < 'z ' || !y45 > 0為真,'a' < 'z' 也為真,所以45 > 0 && 'a' < 'z '為真,變為1 || !
y1與什麼值相或都為1,所以答案為1
19樓:匿名使用者
||||||運算時把後面的所有表示式當成它右邊的一個表示式上面那句等價於++x||(++y&&++z )
且得到x>0後||有邊的表示式不會進行運算而直接退出
要達到你說的意思講表示式修改為(++x||++y)&&++z 即可
20樓:
看來你對優先順序的理解有點問題。優先並不決定運算順序,它的實質是結合
性,是說++是與y結合在一起而不是和||結合在一起;前面的++也是與x結合在一起。而||是連線(++x)和(++y)運算子而不是連線x和++的運算子。c/c++中表示式的運算順序一律從左至右!
21樓:匿名使用者
++x 已經為true了
22樓:匿名使用者
||號,是第一個條件滿足就不管第二個條件,所以不做++y。
23樓:反叛的神明
原題=++x || (++y && ++z)++級運算高 =++x || 1 = 1||1=1
c語言中xy是什麼意思C語言中xy是什麼意思?
1,首先,要知道x y這個表示式相當於x x y.2,這個符號是按位異或運算子 3,運算子的運算方式如下 1 將兩個數即這裡的x,y轉化為二進位制數。2 參加運算的兩個二進位同號則結果為0 假 異號為1 真 3 運算規則 0 0 0 0 1 1 1 0 1 1 1 0 具體例子如下 計算4 5 00...
c語言中X Y是什麼意思,C語言中x y,x y分別表示什麼意思
x x y的意思 相應的還有x y x y等都是這個意思 c語言中x y,x y分別表示什麼意思 x y 等價於 x x y x y 等價於 x x y 同理x y 等價於x x y。如以下 int main 結果圖 是複合的賦值運算子 x y 等價於 x x y x y 等價於x x y c語言採...
在c語言中0和n都是什麼意思,在C語言中 0 和 n 都是什麼意思?
轉義字元。1 0其實就是0,字串存入字元陣列的時候最後一個字元作為字串的結尾回。告訴計算機,答 這個字串結束了。2 n是回車換行,挺長用的。比如 printf d n a 就會輸出a的值以後,自動換行。putchar n 輸出一個回車。其它的你可以瞭解一下 t,相當於一個很大的空格。根據你的補充提問...