我有这个代码:
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++