簡體   English   中英

關於邏輯 AND 運算符

[英]Regarding logical AND operator

int a=8, b=10,c=2,d;
d= ++a && ++b || ++b; 

在上面的代碼中,我怎么知道(++a) , (++b)是真還是假。 我知道真為 1,假為 0。但我不明白如何確定這些表達式是真還是假。 請幫忙。

0為假,任何非零值都為真。 所以你只需要確定++a++b是否為零。

由於a最初是8++a9 ,它是非零的,所以它是真的。

由於b最初是10++b11 ,它是非零的,所以它是真的。

9 && 11為真,因為兩個操作數都為真。

|| 僅當第一個操作數為假時才計算第二個操作數。 所以第二個++b即從未執行過。 true || anything的值 true || anything都是true

因此, d將設置為 true,即1

在 C 中,邏輯運算符( &&||!等)假定零為false ,所有其他值為true

基於運算符優先級(運算符&&優先級高於||運算符),表達式將被計算為:

d = (++a && ++b) || ++b; 

請注意,邏輯AND運算expr1 && expr2采用短路行為。 使用邏輯短路,僅當結果未完全由第一個操作數expr1確定時,才計算第二個操作數expr2 也就是說,如果expr1為邏輯0 (假),則不計算expr2

++a將導致9 ,一個非零值,因此,導致true ,因此&&運算符的右側操作數,即++b ,將被評估。
++b將導致11 ,一個非零值,因此,導致true

true && true將導致true

邏輯OR運算expr1 || expr2 expr1 || expr2采用短路行為。 也就是說,如果expr1為邏輯1 (真),則不計算expr2

因此,在給定的表達式中, ||的左側被評估為true ,因此||的右側操作數運算符,即++b ,不會被評估,整個表達式的結果將為true 因此, d的值為1

在 C、C++ 和許多其他編程語言中,對於整數,0 被認為是假的,而任何其他 integer(包括負數)都是真。 所以這里 d 將被評估為 true

在“C”中,我們知道真為“1”,假為“0”,因此上述表達式將為真,因為兩個表達式都不為零。 如果你想打印像 true 和 false 這樣的實際值,我認為你應該試試 printf("%s", x?"true":"false");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM