逻辑运算符的问题



我有这个代码:

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

我不明白为什么最后 b 等于 -13 而不是 -25。 A 等于 -11,这里一切正常,但为什么 b 是 -13?

在计算语句 b+= a && a++ 之前;A 和 B 的实际值为 B=-14 和 A=-12。编译器将像这样计算此表达式 b=b+(a&&a++(。因此,(a&&a++( 将返回 1,这就是为什么你得到 -13 作为 b 的值。

a && a++返回-12因为编译器会像这样计算这个表达式(a&&a); a=a+1;,二进制中的-12等于1111111111111111111111111111111111111111111111111111111111110100&&运算符每个位与自身。(a&&a)像这样计算

1111111111111111111111111111111111111111111111111111111111110100 
&&
1111111111111111111111111111111111111111111111111111111111110100
_________________________________________________________________
1111111111111111111111111111111111111111111111111111111111110100

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

相关内容

  • 没有找到相关文章

最新更新