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. 正数的补码:正数的补码就是其二进制表示。
  2. 负数的补码:负数的补码是其绝对值的二进制表示按位取反后再加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位),由符号位、指数位和尾数位组成。
  • 负数:使用补码表示法,解决了符号位扩展和减法运算的问题。