整数在内存中的存储
整型数就是通常使用的整数,分为无符号整数和带符号整数两大类。
整型数在内存中是以二进制形式存放的,实际上,数值是以补码的形式表示的。在机器中用最高位表示数的符号,正数符号用“0”表示,负数符号用“1”表示。
这里根据设备平台不同,大小端介绍,一般PC都是小端字节序:
大端:数据的低字节存在高地址处。
小端:数据的低字节存在低地址处。
原码、反码、补码
原码、反码、补码都是针对二进制位而言的,这里用-10
做演示。
其实计算机中表示数字都是使用补码方式表示的,至于为什么,在下面会讲到。
- 正数的补码和原码相同。
- 负数的补码是原码取反加一。
补码表示数字的优势在于:
可以把加减法运算统一变成加法运算,因为CPU只有加法器,所以只使用加法器就可以完成了。这就是为什么用补码表示。
这样可以间接减少硬件成本,例如1 - 10
这个减法运算就可以在内存角度用加法计算出结果了:
浮点数在内存中的存储
浮点数在计算机中是按指数的形式存储,即把一个浮点数分为小数和指数两部分。
浮点数的表示形式:
根据国际标准IEEE754,任意一个二进制浮点数可以表示成下面的形式
(-1)^S * M *2^E
(-1)^S表示符号位,当S=0,V为整数;当S=1,V为负数。
M表示有效数字,大于等于1,小于2.
2^E表示指数位
举例:
- 十进制的5.0,写成二进制是 101.0 ,相当于 1.01×2^2 。 那么按照上面格式,可以得出s=0,M=1.01,E=2。
- 十进制的-5.0,写成二进制是 -101.0 ,相当于 -1.01×2^2 。那么s=1,M=1.01,E=2。
注:64位浮点数除了符号位和32位浮点数相等,其他E或者M都比32位的数字要大。
- E(指数位):越大说明数据表示的范围越大。
32位中占8位,64位占11位。 - M(有效数字):越大说明数据精度越高。
32位中占23位,64位占52位。