我已经用 C 编写了代码
#include<stdio.h>
int main()
{
char a = 128;
char b = -128;
printf("%c",a);
printf("%c",b);
}
上面代码的输出是ÇÇ
使用 128 或 -128 输出结果是一样的。为什么?如果可能,请解释使用二进制。
我已经用 C 编写了代码
#include<stdio.h>
int main()
{
char a = 128;
char b = -128;
printf("%c",a);
printf("%c",b);
}
上面代码的输出是ÇÇ
使用 128 或 -128 输出结果是一样的。为什么?如果可能,请解释使用二进制。
有符号的 char
类型通常具有 -128 到 127 的范围。由于 128 在此范围之外,您的编译器将其转换为具有相同 8 位位模式的值,这是 - 128.
文字 -128 的类型为 int
并且在 32 位 2 的补码表示中具有位模式:
1111 1111 1111 1111 1111 1111 1000 0000
在这种情况下,当您将其分配给 char
时,存在隐式转换(强制转换),因此仅使用 LSB 1000 000
或十进制数 128。因此结果相同.
严格来说,如果 char
是 signed
,则行为是实现定义的,并且标准以有些神秘的“as-if”术语为 unsigned char
定义行为. char
本身是有符号还是无符号本身是实现定义为实际宽度,因此是 char
的范围。在实践中,虽然上述解释是在这种情况下发生的情况,并且是使用 8 位 char
的任何实现最可能的行为,但 char
是有符号还是无符号都没有区别。