目录
整数和浮点数在内存中是以二进制的方式进行储存,有原码,反码,补码三种形式;在内存中是以补码的方式进行储存的,在操作符中有详细讲解;(C语言)操作符(全网最全,最详细)-优快云博客文章浏览阅读1.1k次,点赞32次,收藏22次。操作符(全网最全,最详细)https://blog.youkuaiyun.com/2401_87944878/article/details/143274246https://blog.youkuaiyun.com/2401_87944878/article/details/143274246
https://blog.youkuaiyun.com/2401_87944878/article/details/143274246
1>.存储的方式
存储的方式分为两种:大端字节序存储,小端字节序存储;
大端字节序存储:将一个数据的低位字节内容存放在高地址处,高位字节内容存放在低地址处;
小端字节序存储:将一个数据的高位字节内容存放在高地址处,低位字节内容存放在低地址处;
vs整形运用的是小端字节序存储;
总结来说就是:正着放是大端,反着放是小端;
2>.关于用%d来打印char类型数
注意:前面补位补的是什么;
//用%d来打印char类型的返回值
int main()
{
char a = -1;
//char类型只有一个字节空间,也就是8个比特位;
//-1的补码是111111111111.....111111111111111;
//只储存8个比特位,最后8个二进制数值:11111111;
//要用%d的类型打印,高位自动补符号位,直到补完前24个数值;
//1111111111111......1111111111;32个1;
unsigned char b = -1;
//对于无符号字符高位都补0;
//不完后是:000000.....00011111111;
printf("char a=%d\nunsigned char b=%d", a, b);
return 0;
}
结果分别是:-1 ; 255
3>.不同类型能表示的范围
//char类型的范围
//char在储存的时候,只占用一个字节,也就是8个比特位
//第一个是符号位:01111111最大值:127
//10000000负数中的最小值,无法计算,被看作-128
//10000001是-127
相当于一个循环
unsigned char类型因为没有符号位,所以它的范围是0-255;
short类型是:-32768-32767;
注意:char a=0其实a储存的是ASCII码值为0的字符;
4>.浮点数在内存中的存储
5.5的二进制就是101.1,其中的1和0都是二进制,0.1表示2^(-1);
举例来说:5.5=(-1)^0*1.011*2^2
注意:因为小数都是2的(-n)次方相加得到的,所以在储存的时候浮点数可能不能精确储存;
储存方式
M可以写成1.xxxxxx,其中xxxxxx是小数部分,在计算机内部保存M的时候,默认这个数的第一位是1,因此可以舍去,不用保存,只保存后面的xxxxxx,比如:1.01只保存01,等到读取的时候,再把第一位的1加上就可以了,这样可以节省一个比特位,让M可以多占用一个比特位;
E在内存中的存储
为了保证在内存中E的储存是一个正数,对应于32位机器,我们需要加上一个中间量127;也就是-5在内存中是-5+127=122,就是0111 0000;
E在内存中的取出
1)E不全是0和1
指数在取出的时候,计算值减去127(或1023),得到真实值,再将有效值数值M前加上一位1;
2)E全为0
减去127(或1023)或是2^(-127)是一个接近于0的很小的数字,当作0看
3)E全为1
其表示+(-)127,看作一个无穷大的数;