【发布时间】:2013-11-17 13:40:46
【问题描述】:
我在VC++2010中做了一些混合不同大小的操作数导致加法操作溢出的测试:
int _tmain(int argc, _TCHAR* argv[])
{
__int8 a=127;
__int8 b=1;
__int16 c=b+a;
__int8 d=b+a;
printf("c=%d,d=%d\n",c,d);
return 0;
}
//result is: c=128, d=-128
我不明白为什么 c==128!我的理解是,在这两个加法中,b+a 仍然被认为是 2 个有符号 8 位 变量的加法。所以结果是溢出,即-128。 之后,结果被提升为 16 位有符号 int 以进行第一次赋值操作,c 仍应获得 16 位 -128 值。我的理解正确吗? c++ 标准有点难以阅读。第 4 章似乎在谈论整数提升,但我找不到与这个特定示例相关的任何内容。
【问题讨论】:
-
积分提升正是通过通常的算术转换发生的;见 [expr]/10。
标签: c++ integer-overflow type-promotion