我有这段代码:
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?
答案 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++;