小编sch*_*ier的帖子

在C表达式中发生整数溢出时会发生什么?

我有以下C代码:

uint8_t firstValue = 111;
uint8_t secondValue = 145;
uint16_t temp = firstValue + secondValue;
if (temp > 0xFF) {
    return true;
}
return false;
Run Code Online (Sandbox Code Playgroud)

这是替代实现:

uint8_t firstValue = 111;
uint8_t secondValue = 145;
if (firstValue + secondValue > 0xFF) {
    return true;
}
return false;
Run Code Online (Sandbox Code Playgroud)

第一个例子是显而易见的,uint16_t类型足够大以包含结果.当我clang在OS/X上使用编译器尝试第二个示例时,它正确返回true.那里发生了什么?是否有某种临时的,更大的类型来包含结果?

c integer-overflow integer-promotion

4
推荐指数
1
解决办法
1528
查看次数

标签 统计

c ×1

integer-overflow ×1

integer-promotion ×1