数据以二进制的形式存储在内存中。
1、正数储存
unsigned char a = 256;
printf("a = %d\n",a);
以上代码输出结果为:a = 0
原因:256的二进制形式为:1 0000 0000
而字符型变量在内存中占一个字节。
所以a储存在内存时是0000 0000,故输出为0
2、负数储存
相关概念
①源码、反码、补码
以200为例
源码:1100 1000(200的二进制形式)
反码:0011 0111(源码取反)
补码:0011 1000(反码加一)
②unsigned char 与 char 的区别
unsigned char 是无符号字符型,范围:0~255
char 是有符号字符型,范围:-128~127(最高位代表符号 0为正1为负)
③负数在内存中以补码形式储存
char a = 200;
printf("a = %d\n",a);
此时a对应的内存空间储存的是1100 1000,最高位代表为负数,不参与运算
当读数据时,电脑会将a还原成源码,即此时
补码:100 1000
反码:100 0111
源码:011 1000 (十进制为56)
所以读出来的数据为1011 1000,最高位代表正负(1负0正)
所以程序输出的是a = -56