关于逻辑AND运算符

时间:2020-07-18 06:24:37

标签: c

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

在上面的代码中,如何知道(++a)(++b)是true还是false。我知道true为1,false为0。但是我无法理解如何确定这些表达式是true还是false。 请帮忙。

4 个答案:

答案 0 :(得分:4)

0为false,任何非零值为true。因此,您只需要确定++a++b是否为零。

由于a最初是8,所以++a9,它不为零,所以是真的。

由于b最初是10,所以++b11,它不为零,所以是真的。

9 && 11为真,因为两个操作数都为真。

||仅在第一个操作数为false时才评估第二个操作数。因此第二个++b即从未执行。 true || anything的值为true

因此,d将设置为true,即1

答案 1 :(得分:3)

在C中,逻辑运算符(&&||!等)假定零为false,所有其他值均为true

基于运算符的优先级(运算符&&的优先级高于||运算符),该表达式的计算结果为:

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

请注意,逻辑AND操作expr1 && expr2采用短路行为。如果发生逻辑短路,则只有当第一个操作数expr2不能完全确定结果时,才评估第二个操作数expr1。 也就是说,如果expr2是逻辑expr1(否),则不会评估0

++a将导致9(非零值),因此将导致true,因此&&运算符的右侧操作数为{{1 }},将被评估。
++b将得出++b(非零值),因此将得出11

true将产生true && true

逻辑true操作OR采用短路行为。也就是说,如果expr1 || expr2是逻辑expr2(正确),则不评估expr1

因此,在给定的表达式中,1的左侧被评估为||,因此true运算符的右侧操作数为||,将不会被求值,整个表达式的结果将为++b。因此,true的值为d

答案 2 :(得分:1)

在C,C ++和许多其他编程语言中,对于整数,0被认为是错误的,而其他整数(包括负数)则为true。所以这里d将被评估为真

答案 3 :(得分:0)

在'C'中,我们知道true为'1'而false为'0',因此上述表达式将为true,因为两个表达式都不为零。并且如果您想打印诸如true和false的实际值,我想您应该尝试一下printf(“%s”,x?“ true”:“ false”);