我有下面的C代码:当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。那里会发生什么?有没有某种临时,更大的类型来包含结果?
对于无符号类型,结果是“它应该是”以接收变量的大小为模。我的意思是:只有适合的位被存储;剩下的(如果有的话)被忽略。对于签名类型,结果是未定义的。 – wildplasser 2014-10-04 18:39:30