整数和浮点数在内存中的存储
目录
在学习整数与浮点数在内存中储存的简单个人见解
1.整数在内存中的存储
整数的二进制表示形式有三种:原码,反码和补码。
而正数与负数的原码反码补码的计算方法不同。
以1为例子:
例子1: | 正1 | 负1 |
---|---|---|
原码 | 0000000000000000000000000000001 | 1000000000000000000000000000001 |
反码 | 0000000000000000000000000000001 | 11111111111111111111111111111111110 |
补码 | 0000000000000000000000000000001 | 11111111111111111111111111111111111 |
这三种表示方式均由符号位和数值位两部分组成,符号位为最高位,0为”正“,1为”负“。
正数原码反码补码都相同。
而负数的原码反码补码取值方法如下:
原码:直接将数值翻译成二进制数所得到的就是原码;
反码:原码符号位不变,其他位按位取反;(0变1,1变0)
补码:反码基础上+1;
在计算机系统中,数值都是用补码形式来表示和储存的。
2.大小端字节存储和字节序判断
大端(存储)模式:是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处。(低位存高址)
小端(存储)模式:是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址处。(低位存低址)
为什么会有大小端之分?
历史原因:在计算机发展的早期阶段,不同的处理器厂商采用了不同的字节序,导致在数据交换和通信时出现了问题。为了解决这个问题,需要有大小端之分。
数据交换:在进行数据交换或通信时,如果双方的字节序不一致,就需要进行字节序的转换,否则会导致数据解析错误。
硬件兼容:不同的硬件架构可能采用不同的字节序,为了保证软件在不同平台上的兼容性,需要考虑大小端问题。
总之,大小端之分主要是为了解决不同处理器和硬件架构之间的兼容性和数据交换的问题。
————————————————
版权声明:本文为CSDN博主「cookies_s_s」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cookies_s_/article/details/134710528
3.浮点数在内存中的存储
浮点数与整数在内存中储存方式不同,用浮点数输出int类型的值时,偶尔会出现数据不同的错误。
根据IEEE754(电气电子工程师学会)规定,任意一个二进制浮点数V可以表示成下面的形式:
V = (-1)^S * M * 2^E
其中(-1)^S表示符号位,当S=0时,V为正数,当S=1时,V为负数
M表示有效数字,M是大于1小于2的
2^E表示指数位
举个例子,十进制的6.0,二进制为110.0,根据上面规则即为110.0=(-1)^0 * 1.10 * 2^2
S=0;M=1.10;E=2.
十进制的-6,二进制为-110.0,即为-110.0=(-1)^1 * 1.10 * 2^2
S=1;M=1.10;E=2
————————————————
版权声明:本文为CSDN博主「cookies_s_s」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cookies_s_/article/details/134710528