【发布时间】:2014-10-04 18:23:19
【问题描述】:
我有以下 C 代码:
uint8_t firstValue = 111;
uint8_t secondValue = 145;
uint16_t temp = firstValue + secondValue;
if (temp > 0xFF) {
return true;
}
return false;
这是替代实现:
uint8_t firstValue = 111;
uint8_t secondValue = 145;
if (firstValue + secondValue > 0xFF) {
return true;
}
return false;
第一个例子很明显,uint16_t 类型足够大,可以包含结果。
当我在 OS/X 上使用clang 编译器尝试第二个示例时,它正确返回了 true。那里会发生什么?是否有某种 临时 更大的类型来包含结果?
【问题讨论】:
-
对于无符号类型,结果是“应该是什么”,以接收变量的大小为模。我的意思是:只存储适合的位;其余的(如果有的话)被忽略。对于有符号类型,结果是未定义的。
标签: c integer-overflow integer-promotion