1.整数的存储:
整数通常使用二进制补码形式存储。
对于正数,其补码就是其二进制表示;
对于负数,其补码是其绝对值的二进制表示取反后加1。
例如,考虑一个8位的整数:
- 正数5的二进制表示为
00000101
,原码,反码,补码一致,这就是它在内存中的存储形式。 - 负数5的绝对值(即5)的二进制表示为
00000101
,取反后得到11111010
,再加1得到11111011
,这就是-5在内存中的存储形式。 - 原码 0000 0101
- 反码 1111 1010
- 补码 1111 1011
整数的大小和范围取决于分配给它们的位数。例如,一个8位整数可以表示的范围是-128到127,而一个32位整数可以表示的范围则要大得多。
2.浮点数的存储:
浮点数在内存中通常使用IEEE 754标准来存储。这个标准定义了浮点数的格式:包括符号位、指数和尾数(或称为有效数字)。
IEEE 754标准下的浮点数通常由三个部分组成:
- 符号位:表示浮点数的正负。
- 指数位:用于表示浮点数的指数部分,通常是偏移形式,这样指数可以是正数或负数。
- 尾数位:表示浮点数的有效数字或尾数。
- 例如,一个单精度浮点数(float)通常占用32位,其中1位用于符号,8位用于指数,23位用于尾数。而双精度浮点数(double)则占用64位,其中1位用于符号,11位用于指数,52位用于尾数。
拿32位数字 3.5 作为实例吧:
3.5 的二进制位: 11.1 (因为 0.5=2 的-1次方)
把他变成科学计数法: (-1)^0 × 1.11 × 2^1
分成三个部分:1. 符号位S(1个字节)---0
2.指数位E(8个字节)----1
3.尾数位M(23个字节)----1.11
在内存中存储时:1.指数位需要加上127,等于1+127=128转化为二进制位10000000
2.尾数位只存小数点后面的位,就是.11然后剩下的位补0
所以3.5在内存中存储是如图
为 0100 0000 0110 0000 0000
转换为16进制是 40 60 00 00
我们在VS code里面调试看一下是否正确
因为是小端存放,所以是倒数的
通过这种存储方式,计算机能够精确地表示和运算浮点数,尽管由于精度限制和舍入误差,有时可能会产生一些微小的偏差。
浮点数在科学计算、金融建模、图形处理等领域中广泛应用,因为它们能够表示更大范围的数值,并且具有一定的精度。然而,在进行浮点数运算时,需要注意精度损失和舍入错误的问题。
这期介绍就到这里!可以点点赞关注,你们的支持是我继续的动力!
下期介绍什么是小端,什么是大端存放?