繁体   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