浮点数在计算机中的表示

浮点数在计算机中的表示

float单精度浮点数的存储格式

符号位
8bit阶码,偏移量127
23bit尾数
  • 符号位:0正1符,注意计算机中都用补码表示

  • 阶码:记得+127偏移量 2 7 − 1 = 0 1111111 ⏟ 7 个 1 2^7-1=0 \underbrace{1111111}_{7个1} 271=071 1111111

  • 尾数:共23位,末尾补零

10进制->float步骤

  1. 规格化:将 112.5 D − > 1.1100001 × 2 6 112.5D->1.1100001 \times 2^6 112.5D>1.1100001×26,即 符号位 . 尾 数 阶码 符号位.尾数^{阶码} 符号位.阶码
  2. 求阶码:阶码 = 阶码+127偏移量, 即 6 + 127 = 10000101 B 6+127=10000101B 6+127=10000101B
  3. 补全尾数

double双精度浮点数的存储格式

符号位
11bit阶码,偏移量1023
52bit尾数
  • 符号位:0正1符,注意计算机中都用补码表示

  • 阶码:记得+1023偏移量 2 10 − 1 = 0 1111111111 ⏟ 10 个 1 2^{10}-1=0 \underbrace{1111111111}_{10个1} 2101=0101 1111111111

  • 尾数:共23位,末尾补零

例题

1) 112.5 D 112.5D 112.5D 转换为float

  • 规格化:将$112.5D->1.1100001 \times 2^6 $,即 符号位 . 尾 数 阶码 符号位.尾数^{阶码} 符号位.阶码
  • 求阶码:阶码=阶码+127偏移量 6 + 127 = 10000101 B 6+127=10000101B 6+127=10000101B
  • 补全尾数 1100001   000 ⋯ 000 ⏟ 16 个 0 1100001 \, \underbrace{000 \cdots 000}_{16个0} 1100001160 000000
  • 最终: 0 ⏞ 符号位   10000101 ⏞ 阶码   1100001   000 ⋯ 000 ⏟ 16 个 0 ⏞ 尾数 \overbrace{0}^{符号位} \, \overbrace{10000101}^{阶码} \, \overbrace{ 1100001 \, \underbrace{000 \cdots 000}_{16个0}}^{尾数} 0 符号位10000101 阶码1100001160 000000 尾数

2) 0.0101 B 0.0101B 0.0101B 转换为float