C语言里字符的问题
char c1;
c1=100011;
printf("%d",c1);
打印结果为-85
c1=1011;
printf("%d",c1);
打印结果为-13
这里-85,-13是什么东西
[解决办法]
char类型的范围是-128~127。在内存中以8位补码形式存放。
1011在内存中是
0000 0011 1111 0011
截断,保留低位
所以在内存中是1111 0011
对应的原码就是-13
前面的类似。
[解决办法]
1011是十进制,对应的二进制是0000 0000 0000 0000 0000 0011 1111 0011
当你将十进制的1011赋值给char c1时,只是将他的低八位赋值给了c1,即c1的二进制表示就是
1111 0011,当你用%d打印的时候,要打印的十进制,是32位,打印的时候就会把高位补足,补足的方式是重复最高一位1,所以就变成了1111 1111 1111 1111 1111 1111 1111 0011,就变成了-13
-85类似。。。