C语言环境下 字符型数据赋给整形变量的有关问题


'\376'为例
①程序将变量定义为unsigned char 型将字符放到低8位中,高八位补零;00 00 00 00 11 11 11 10
②程序将变量定义为signed char型将字符放到低8位中,因为最高位为1,所以高八位补1 ;11 11 11 11 11 11 11 10
输出均为-2
第②个为-2补码,但为什么第一个也输出-2呢?
#include <stdio.h>
void main()
{
unsigned int c;
c='\376';
printf("%d\n",c);
}

清华大学出版社 谭浩强主编 《C程序设计》第60页

第1个回答  2014-03-19
char型变量占用的内存单元是一个字节,只有8位。
第2个回答  2014-03-19
因为第2个是补码表示!他的2进制真值是取反加1!为00000000 0010=-2