逻辑运算符的问题

时间:2018-02-05 10:48:03

标签: logical-operators

我有这段代码:

int i = -6, a= -06;
while (a--, a+=2)
 {
    a-=2;
    ++i;
    printf("OK\n");
    if(!i)
    break;
 }
 int b= -0xe;
 b+= a && a++;
 printf("%d %d\n", a,b);

我无法理解为什么在结尾b等于-13而不是-25。 a等于-11,这里一切正常,但为什么b是-13?

2 个答案:

答案 0 :(得分:1)

在评估声明之前 b + = a&&一个++; a和b的实际值是b = -14和a = -12。编译器将像 b = b +(a&& a ++)一样评估此表达式。因此,(a&& a ++)将返回1,这就是为什么你得到-13作为b的值。

答案 1 :(得分:0)

a && a++会返回-12,因为编译器会像这样(a&&a); a=a+1;评估此表达式,二进制的-12等于1111111111111111111111111111111111111111111111111111111111110100,{{1}运算符每个位都有自己的位。 &&计算如下

(a&&a)

所以1111111111111111111111111111111111111111111111111111111111110100 && 1111111111111111111111111111111111111111111111111111111111110100 _________________________________________________________________ 1111111111111111111111111111111111111111111111111111111111110100 和语句(a&&a) = a评估为b+= a && a++;