C1.1 浮点数与负数的存储
C1.1 浮点数与负数的存储
1 浮点数的存储
浮点数在计算机中通常使用 IEEE 754 标准进行存储。IEEE 754 定义了单精度(32位)和双精度(64位)浮点数的表示方法。
1.1 单精度浮点数(32位)
- 符号位(S):1位,表示数的正负。0表示正数,1表示负数。
- 指数位(E):8位,表示指数部分。偏移量为127,即实际指数值 = E - 127。
- 尾数位(M):23位,表示小数部分。尾数部分通常隐含一个前导1,即实际尾数 = 1.M。
例如,一个单精度浮点数 1.0
的二进制表示如下:
- 符号位:0(正数)
- 指数位:127(127 - 127 = 0)
- 尾数位:0(1.0)
所以,1.0
的二进制表示为:1
0 10000000 00000000000000000000000
尾数位的计算方法如下:
以0.2为例循环计数,直到尾数位的乘积为整数。
1.2 双精度浮点数(64位)
- 符号位(S):1位,表示数的正负。0表示正数,1表示负数。
- 指数位(E):11位,表示指数部分。偏移量为1023,即实际指数值 = E - 1023。
- 尾数位(M):52位,表示小数部分。尾数部分通常隐含一个前导1,即实际尾数 = 1.M。
例如,一个双精度浮点数 1.0
的二进制表示如下:
- 符号位:0(正数)
- 指数位:1023(1023 - 1023 = 0)
- 尾数位:0(1.0)
所以,1.0
的二进制表示为:1
0 10000000000 0000000000000000000000000000000000000000000000000000
尾数位的计算方法如下同上。
2 负数的存储
负数在计算机中通常使用补码表示法进行存储。补码表示法解决了符号位扩展和减法运算的问题。
2.1 有符号整数的补码表示
对于一个8位的有符号整数,其范围是从-128到127。补码的计算方法如下:
- 正数的补码:正数的补码就是其二进制表示。
- 负数的补码:负数的补码是其绝对值的二进制表示按位取反后再加1。
例如,8位有符号整数 -5
的补码表示如下:
- 5的二进制表示:
00000101
- 按位取反:
11111010
- 加1:
11111011
所以,-5
的二进制表示为:1
11111011
特殊的有-1的补码位 (32bit)0xffffffff。
2.2 有符号整数的范围
- 8位有符号整数:范围是 -128 到 127。
- 16位有符号整数:范围是 -32768 到 32767。
- 32位有符号整数:范围是 -2147483648 到 2147483647。
- 64位有符号整数:范围是 -9223372036854775808 到 9223372036854775807。
3 总结
- 浮点数:使用 IEEE 754 标准,分为单精度(32位)和双精度(64位),由符号位、指数位和尾数位组成。
- 负数:使用补码表示法,解决了符号位扩展和减法运算的问题。
评论