我有以下代码:
char x = -1;
int y = x;
printf("%u\n", x);
printf("%u\n", y);
输出为:
4294967295
4294967295
我不明白为什么x可以得到这样的值。我知道无符号字符的最大值是255,有符号字符的最大值是127。它怎么可能是4294967295?
最佳答案
对于像 printf
这样使用可变参数的函数,任何小于 int
的整数类型(char
和 short
>) 隐式提升为 int
。 float 也是如此,float
提升为 double
。
因此,您的 char
被符号扩展为值为 -1
的 int
,并且由于您将其打印为无符号,用 2 的补码得到 UINT_MAX
。
编辑:正如下面 chux 所指出的,如果您的 char
默认为无符号(这取决于您的编译器/平台),则答案将是 255
。当提升发生时,该值将被零扩展而不是符号扩展。
关于c - 有符号字符的无符号字符输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47599120/