[英]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
, ++a
是9
,它是非零的,所以它是真的。
由於b
最初是10
, ++b
是11
,它是非零的,所以它是真的。
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.