1樓:倒黴熊
c語言中,為了加快編譯速度,有一條這樣的規定,當一個邏輯表示式的值能夠確定下來的時候,它不會執行下面的語句。
例如:a && b這個表示式,如果a為假,則 a&&b一定為假,不管b為真,還是假,也就是a等於假時,這個表示式的值已經確定了。所以b不會執行了。
但,如果a為真,則 a&&b的值就確定不了,因為b若為假,則表示式為假,b為真,表示式為真,所以還需要判斷b的真假,所以b會執行。
++ix 結果為2,為真。
++iy 結果為2,為真
所以++ix&&++iy 為真, 因為 ||有一個為真,就為真,所以 ++iz不會執行,因為已經得出前面為真了。
2樓:我的一畝三分地
這個問題與編譯系統的優化有關。
一、邏輯運算子&&與||的優先順序高於賦值運算子=;
二、邏輯與&&優先順序大於邏輯或||;
三、對於邏輯表示式,如果前面部分表示式的結果已經決定了整體表示式的值,則為了提高編譯速度,後面的表示式不再運算,如:v1=a&&b;如果a=0,則v1=0,最終結果與b無關,所以此時不再運算b;v2=c||d,如果c=1,則v2=1,最終結果與d無關,不再運算d。
四、在你的例子中,先運算邏輯與“++ix&&++iy”,因為++ix後,ix=2,邏輯表示式的值是0還是1,由“++iy”決定,此時必須運算“++iy”,則iy=2,;邏輯與的結果為1.
五、表示式變為:im = 1 || ++iz;對於邏輯或運算,左邊表示式的值已經為1,則無論++iz的值為多少,均有im=1,所以,此時“++iz”就不再運算了(運算也沒有意義了),所以iz等於初始值1。
3樓:韋南晴
im==1;
ix==2;
iy==2;
iz==1;
因為表示式&&已經成立,所以||後程式不會再繼續執行,因為沒有必要在判斷了,這是機制
4樓:藍騎士之阿強
這個是邏輯或和邏輯與的短路特徵,++ix=2,++iy=2,++ix&&++iy為1,因為||前面為1,整個表示式的值肯定為真,所以++iz無需運算,結果為1
5樓:荔枝in時尚
++ix=2,++iy=2,so ++ix&&++iy為1(邏輯與懂吧?同時為1得1)因為||前面為1,所以++iz無需運算,結果為1(這裡是邏輯或運算,有1為1)所以im為1 不知道懂不懂。。。
c語言寫出邏輯表示式的值
6樓:匿名使用者
1、實現用來戶輸入成績_正確為true__錯誤源為false的方法**。
2、測試
的結果如下所示。
3、實現判斷閏年的方法**,如下圖所示。
4、測試的結果如下所示。
5、實現與或的短路問題**如下所示。
6、最後測試的結果如下圖所示。
7樓:
&&是邏輯與,||是邏輯或;
只是判斷後面的表示式成立值成立值就為1,不成立就為0;
比如第一個是7>5&&4==3, 4==3顯然是不成立的,所以值為0;
8樓:匿名使用者
c語言中bai非0的都為真 表示判斷條件成
du立printf("putout:%d\n",a+b>c&&b==c); // 4 == 5 為假 就是
zhi0 因為用的dao是&&必須兩面都是真版才為真
printf("putout:%d\n",a|權|b+c&&b-c); //(a || (b+c)) && (b-c) ,真 || 真 && 真 = 真
printf("putout:%d\n",!(a>b)&&!c||1); //(!(a>b) && !c) || 1 ,(假 && 假) || 真 = 真
printf("putout:%d\n",!(x=a)&&(y=b)&&0); // !(x=a) && (y=b) && 0 (假 && 真) && 假 = 假
printf("putout:%d\n",!(a+b)+c-1&&b+c/2); // !
(a+b) + c - 1 && b + c / 2 ,(假 + c - 1) && 6 = 真
9樓:匿名使用者
||||
非0即為真
&&是邏輯與,||是邏輯或,優先順序:&&>||1.printf a+b>c(真)版 b==c(真)2.
printf a(真) 因為是"||"運算權,後面就不用看了3.printf !(a>b)(真) !
c(假) 1(真)4.printf 0(假) 因為是“&&”運算,肯定是05.printf !
(a+b)+c-1(真) b+c/2(真)
10樓:匿名使用者
第一個,a+b>c 就是3+4>5成立,為1;而b不等於c,b==c為0,而&&兩者都是1得值才是1,所以第一個為回0.
第二個,此處+-優先順序最高,答其次是&&,最低是||,注意同是邏輯運算子優先順序不一樣。還須注意,按照優先順序加括號:
a || b + c && b - c
=a || ((b + c) && (b - c))
=3 || ((4 + 5) && (4 - 5))
=3 || 1
=1第三個,相當於((!(a>b))&&(!c))||1),||有1就是1,所以就是1。
第四個,相當於(!a)&&b&&0,也就是0&&1&&0,所以為0。
第五個,((!(a+b))+c-1)&&(b+c/2)=(!7+5-1)&&(4+2)=(0+5-1)&&(6)=4&&6=1。
邏輯表示式只要不是0,其他都是1
關於c語言邏輯運算子一道簡單的題目!
11樓:夏碧夢
這是邏輯運算子的短路判斷造成的!
由於邏輯運算子||和&&實現判斷左值的,顯然如果根據左值就能夠判斷整個表示式真假的話,那剩下的就不用判斷了!目前的c編譯就是這樣處理的!
對於邏輯或||,左值為真,整個表示式就為真;
對於邏輯與&&,左值為假,整個表示式就為假!
++x||++y&&++z中先執行邏輯或||左邊的++x後x=1,左值為真,後面的自然就不用處理了!
12樓:匿名使用者
這個是c語言的優化造成的。
按照c語言對邏輯或運算優化計算的規定,當邏輯或的左運算分量滿足時,不再計算邏輯或的右運算分量,而直接得到邏輯或運算的結果。由於邏輯或的右運算分量不曾計算過,所以變數y,z的值也不為變化。
13樓:伊·梵
就是這樣算的
邏輯運算子從左至右還確保其運算元的計算。 但是,它們計算必要的運算元的最小數目確定表示式的結果。 這稱為 “短路計算”。
c語言中,關係表示式和邏輯表示式的值是什麼?
14樓:知足
關係表示式和邏輯表示式的值是布林型:真或假(true or false),即0或1,但c語言沒有布林型別,以0為假,非0即真。
邏輯運算又稱布林運算。布林用數學方法研究邏輯問題,成功地建立了邏輯演算。他用等式表示判斷,把推理看作等式的變換。
這種變換的有效性不依賴人們對符號的解釋,只依賴於符號的組合規律 。這一邏輯理論人們常稱它為布林代數。
20世紀30年代,邏輯代數在電路系統上獲得應用,隨後,由於電子技術與計算機的發展,出現各種複雜的大系統,它們的變換規律也遵守布林所揭示的規律。
簡介1、c語言中的邏輯表示式
用邏輯運算子將關係表示式或邏輯量連線起來的有意義的式子稱為邏輯表示式。邏輯表示式的值是一個邏輯值,即"true"或"false"。c語言編譯系統在給出邏輯運算結果時,以數字1表示"真",以數字0表示"假",但在判斷一個量是否為"真"時,以0表示"假",以非0表示"真"。
2、可以將邏輯表示式的運算結果(0或1)賦給整型變數或字元型變數。
注意由於浮點數在計算機中不能非常準確地表示,所以,判斷兩個浮點數是否相同時,通常不使用關係運算子"等於"(==),而是利用區間判斷方法來實現。
關於C語言邏輯表示式X ay b II0
x a y b ii0 1.include stdio.h include math.h void main 這是一個雙目運算子 判斷到 符號,後面的為0,所以還要再判斷 前面部分。如果後面的為1,則不需要再判斷了。然後首先判斷了x a a賦值給x是否成功,成功為1,然後 x a 即 1為0,0與任...
c語言表示式求值,C語言關於表示式求值
c語言有豐富的表示式,這是它的特點之一,表示式主要有4類,算術表示式,賦值表示式,逗號表示式,關係表示式。1.算術表示式就是包含算術運算子 如 等 的表示式 不是語句,後面沒有分號 如 a b,a b,a b c d,3 5等,算術表示式的值就是最後算出的結果,如3 5這個表示式的值就是8 2.賦值...
c語言表示式0的邏輯值是什麼,c語言,表示式( x 0)的邏輯值是什麼?
x 0,的優先順序高,所以相當於 x 0。題目沒說x是什麼型別,暫且當成整型吧。c的邏輯運算中,把0當做false,非0當做true。表示式進一步解釋為 x false。於是 x 的結果就是,如果x是0,則 x 是true 否則 x 是false。所以,如果x是0,x false的結果是false ...