【发布时间】:2020-01-16 01:24:05
【问题描述】:
#include <stdio.h>
{
char num = 127;
num = num + 1;
printf("%d", num);
return 0;
}
输出为:-128
编辑:当我发布这个问题时,我还是个新手。大声笑:)。
【问题讨论】:
-
你认为
char有多大,它的最小值和最大值是多少? -
澄清输出为负128。
-
@SteveSummit 1 字节
-
在 32 位机器上,您通常可以看到与
int num = 2147483647; num = num + 1;相同的效果。 -
@AugustinLopez:
num = num + 1不会导致溢出。num自动提升为int,然后在int中进行加法,得到128 没有溢出。然后分配执行到char的转换。这不是溢出,但根据 C 2018 6.3.1.3,会产生实现定义的结果或信号。这与溢出不同,因为 C 标准根本没有指定溢出时的行为,但是在这段代码中,它指定实现必须定义行为。