获取错误的Char变量数

时间:2012-01-08 09:51:50

标签: c++ char signed

在下面的代码中,当我运行它时,我得到y=-124z=4294967172 你能解释一下吗? (测试如果x<128没有任何问题)

char x=132;
signed y=x;
unsigned z=x;
cout<<y<<endl;
cout<<z<<endl;

3 个答案:

答案 0 :(得分:3)

char是8位,所以当你写char x = 132时,实际上是这样做的:

x = 1000 0100

signed intunsigned int都是32位,每当您将“较小”变量的值分配为“较大”变量时,系统会使用符号扩展,即将符号位复制到左侧的每一位。所以价值变成:

1111 1111 1111 1111 1111 1111 1000 0100

如果将其解释为有符号值,则为-124,而作为无符号值则为4294967172。

此外,如果您在第一行中将char定义为unsigned,则总是会得到132,因为未对无符号值执行符号扩展。

答案 1 :(得分:2)

char s只有8位,这意味着它们只能包含256个值,包括0.您使用的是带符号的char,这意味着为负数保留了一半的值,使得最大正值127。

答案 2 :(得分:1)

在第一行x为10000100(132为10000100b)之后,它是机器中的-124值(见here)。所以在第二行y之后是-124。
之后第3行z是111 ... 1110000100b。高位有1,因为你设置了一个负数,但是当你打印编译器时打印它的二进制值,因为z是无符号的。