【发布时间】:2020-06-20 21:55:01
【问题描述】:
int main()
{
char ch1 = 128;
unsigned char ch2 = 128;
printf("%d\n", (int)ch1);
printf("%d\n", (int)ch2);
}
第一个 printf 语句输出 -128 和第二个 128。根据我的说法,ch1 和 ch2 将具有相同的二进制表示存储的数字:10000000。所以当我将两个值都转换为整数时,它们最终是如何成为不同的值的?
【问题讨论】:
-
char ch1 = 128;导致有符号溢出,因为 127 是适合 8 位 2 的补码有符号字符的最大值。实际上,它是char ch1 = -128;
标签: c