我在C中写了波纹管代码。
#include <stdio.h>
int main()
{
char c;
c=400;
printf("%d",c);
}
输出为-112。为什么? 如果我使用unsigned char,输出将是144.为什么?
答案 0 :(得分:2)
感谢所有用户。
从我在评论中看到的内容,我得出了结论所有讨论的结论。 表示签名类型有3种不同的方式。并且在所有这些表示中,如果最高有效位为1,则该数字为负,如果为0,则该数字为正。 因此,在这个问题中,我的计算机使用2的补码。因此,10010000是2的补码。它的值等于01110000 = 112的负数,所以实际结果是-112。
但是,当类型为无符号时,则值400必须转换为二进制表示,但只有8位数的空间。因此,表示将为1001 0000,因为这是无符号的,所以它等于2 ^ 7 + 2 ^ 4 = 144。
答案 1 :(得分:0)
整型常量的类型是int,当它被赋值给char类型时,它以实现定义的方式转换。
满足结果的实现在概念上如下工作:从值中添加或减去类型的范围(在这种情况下为256),直到值可以由类型表示。
在这种情况下,char的范围是:[ - 128,127],400不能用char类型表示。
减去256,结果144仍无法表示。
再次减去,结果-112可以表示。