dec*_*iar 14 c++ integer integer-overflow integer-promotion
可能重复:
添加两个字符会产生int
给出以下C++代码:
unsigned char a = 200;
unsigned char b = 100;
unsigned char c = (a + b) / 2;
Run Code Online (Sandbox Code Playgroud)
逻辑上预期输出为150 ,但表达式中(a + b)是否应该存在整数溢出?
显然必须有一个整数提升来处理这里的溢出,或者其他一些我无法看到的事情.我想知道是否有人可以启发我,所以我可以知道它是什么,我不能依赖于整数提升和溢出.
AnT*_*AnT 13
C++和C都没有执行带有"较小"整数类型的算术计算,如char和short.int在进一步计算开始之前,这些类型几乎总是被提升.所以,你的表达式实际上被评估为
unsigned char c = ((int) a + (int) b) / 2;
Run Code Online (Sandbox Code Playgroud)
PS在某些异国情调的平台上,其范围int不包括范围unsigned char,该类型unsigned int将用作促销的目标类型.