Oasis's Cloud

一个人的首要责任,就是要有雄心。雄心是一种高尚的激情,它可以采取多种合理的形式。
—— 《一个数学家的辩白》

程序是怎么跑起来的

二进制小数与浮点数

作者:oasis


二进制小数的表示

1011.0011 中,小数位 0011 表示 2124 的和。

负数次幂:

an=1an

计算机如何处理小数

计算机采用浮点数表示小数,将小数分为:符号、尾数、基数、指数。

由于计算机内部使用二进制,基数一定是 2,所以实际数据中不包含基数部分。

符号、尾数、指数这三部分会占用 32 位或 64 位比特的长度。

IEEE 标准的表示:

32 位表示:

  • 符号:1
  • 指数:8
  • 尾数:23

64 位表示:

  • 符号:1
  • 指数:11
  • 尾数:52

尾数部分和指数部分不是单纯的二进制整数。尾数部分使用的是整数部分固定为 1 的规格化表示法;指数部分使用移码表示法。

规格化表示法

十进制小数 0.26,可以采用多种科学计数法的形式表示,下面列举三个形式:

  1. 0.26×100
  2. 2.6×101
  3. 26×102

规格化表示法实际是制定了一种标准。例如对于十进制小数,可以要求整数部分必须是 0。于是小数 0.26,只有一种科学计数法的表示形式(即示例 1)。

对于二进制小数,规格化表示法要求整数部分必须为 1

示例:8.5 的表示

  • 8.5=8+0.5=1000+0.1(这里是二进制)
  • 8.5=1000.1
  • 规格化左移 3 位:1.0001×23

32 位表示:

符号指数(移码表示,8 位)尾数(23 位)
02n11+3=1000 001000010000000000000000000

移码表示法

把真值整体加上一个偏置 bias,编码后就可按无符号数比较大小。常用 n 位取 bias=2n1

4 位二进制移码:00001111,偏置 bias=8,范围是 8+7

  • 0 的移码:1000
  • +1 的移码:1001
  • 1 的移码:0111
  • 两端:0000=81111=+7