【发布时间】:2019-10-18 20:19:20
【问题描述】:
具有以下简单的 C++ 代码:
#include <stdio.h>
int main() {
char c1 = 130;
unsigned char c2 = 130;
printf("1: %+u\n", c1);
printf("2: %+u\n", c2);
printf("3: %+d\n", c1);
printf("4: %+d\n", c2);
...
return 0;
}
输出是这样的:
1: 4294967170
2: 130
3: -126
4: +130
谁能解释一下第 1 行和第 3 行的结果?
我正在使用具有所有默认设置的 Linux gcc 编译器。
【问题讨论】:
-
这叫溢出。
-
你能提供一个minimal reproducible example吗? (即,添加
#includes 和main?) -
@L.F.不是按照标准......其中“溢出”是指算术运算产生超出其类型范围的结果
-
这里解释溢出的概念; C++ integer overflow。
char用 8 位表示 -
在我看来更像 C 代码。
标签: c++ integer printf overflow implicit-conversion