char a = (unsigned short) 200;
printf("%d\n", a);
char b = 200;
printf("%d\n", b);
输出
-56
-56
char分配的是一字节无符号整数,范围通常是 -128 到 127。
赋予200时,首位1被解释为符号位。
于是我们得到一个数的补码为:
1 100 1000
它的反码:
1 100 0111
得到原码:
1 011 1000
计算即得到-56
在 C 语言中,char 类型是一个有符号字符类型,范围通常是 -128 到 127。当你给 char 类型的变量赋予一个超出其表示范围的值时,它可能会发生溢出。
在你的代码中,将整数 200 赋值给 char 类型的变量 b,这个值超过了 char 类型的范围。根据有符号整数的溢出规则,当赋给有符号类型的变量一个超过其表示范围的值时,结果是未定义的。
因此,对于这种情况,输出的结果是不确定的,可能会因编译器实现而异。它可能输出 -56,这是因为 200 被解释为一个溢出的有符号 char 值,也可能输出其他的值。