指数0和255用于特殊的目的,稍后将简单介绍。如果指数的取值范围是1\~254,那么对于一个特定的数,可以用s(符号位),e(指数)以及f(有效数)来描述它:
$$
( - 1 ) ^ { s } \times 1 . f \times 2 ^ { e - 1 2 7 }
$$
-1的s次幂是数学上所采用的一种巧妙的方法,它的含义是:如果 $\pmb { s } = 0$ ,则该数是正的(因为任何数的0次幂都是1);如果 $s = 1$ ,则该数是负的(因为-1的1次幂等于-1)。
表达式的中间部分是1.f,其含义是:1的后面是小数点,小数点后面跟着23位的有效数。1.f与2的幂相乘,其中指数等于内存中的8位的偏移指数减去127。
注意,目前为止我们还没有学习如何表达那个经常遇到却又总被遗忘的一个数字:那就是 $" 0 "$ 。这是一种特殊的情况,下面我们对其进行说明。
如果 $e = 0$ 且 $f = 0$ ,则该数为 $0 _ { \circ }$ 在这种情况下,通常把32位都设置为0以表示该数为 $0 _ { \circ }$ 但是符号位可以设置为1,这种数可以解释为负 $0 _ { \circ }$ 负0可以用来表示非常小的数,这些数极小以至于不能在单精度格式下用数字和指数来表示,但它们仍然小于 $0 _ { \circ }$
如果 $e = 0$ 且 $f \neq 0$ ,则该数是合法的,但不是规范化的。这类数可以表示为:
$$
( - 1 ) ^ { s } \times 0 . f \times 2 ^ { - 1 2 7 }
$$
注意,在有效数中,小数点的左边是 $\scriptstyle \mathbf { 0 } _ { \circ }$
如果 $e = 2 5 5$ 且 $f = 0$ ,则该数被解释为无穷大或无穷小,这取决于符号位s的值。
如果 $e = 2 5 5$ 且 $f \neq 0$ ,则该值被解释为“不是一个数”,通常被缩写为NaN(notanumber)。NaN用来表示未知的数或非法操作的结果。
单精度浮点格式下,可以表示的规格化的最小正、负二进制数是:
$$
1 . 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
$$
小数点后面跟着23个二进制 $\scriptstyle \mathbf { 0 } _ { \circ }$ 单精度浮点格式下,可以表示的规格化的最大正、负二进制数是:
$$
1 . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 \times 2 ^ { 1 2 7 }
$$
在十进制下,这两个数近似地等于 $1 . 1 7 5 4 9 4 3 5 1 \times 1 0 ^ { - 3 8 }$ 和 $3 . 4 0 2 8 2 3 4 6 6 \times 1 0 ^ { 3 8 }$ ,这也就是
编码隐匿在计算机软硬件背后的语言
374