我有以下 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。那里会发生什么?是否有某种临时的、更大的类型来包含结果?