mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-05 11:41:22 +08:00
Update the book based on the revised second edition (#1014)
* Revised the book * Update the book with the second revised edition * Revise base on the manuscript of the first edition
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
在本书中,标题带有 * 符号的是选读章节。如果你时间有限或感到理解困难,可以先跳过,等学完必读章节后再单独攻克。
|
||||
|
||||
## 整数编码
|
||||
## 原码、反码和补码
|
||||
|
||||
在上一节的表格中我们发现,所有整数类型能够表示的负数都比正数多一个,例如 `byte` 的取值范围是 $[-128, 127]$ 。这个现象比较反直觉,它的内在原因涉及原码、反码、补码的相关知识。
|
||||
|
||||
@@ -88,9 +88,9 @@ $$
|
||||
|
||||
## 浮点数编码
|
||||
|
||||
细心的你可能会发现:`int` 和 `float` 长度相同,都是 4 bytes ,但为什么 `float` 的取值范围远大于 `int` ?这非常反直觉,因为按理说 `float` 需要表示小数,取值范围应该变小才对。
|
||||
细心的你可能会发现:`int` 和 `float` 长度相同,都是 4 字节 ,但为什么 `float` 的取值范围远大于 `int` ?这非常反直觉,因为按理说 `float` 需要表示小数,取值范围应该变小才对。
|
||||
|
||||
实际上,**这是因为浮点数 `float` 采用了不同的表示方式**。记一个 32-bit 长度的二进制数为:
|
||||
实际上,**这是因为浮点数 `float` 采用了不同的表示方式**。记一个 32 位长度的二进制数为:
|
||||
|
||||
$$
|
||||
b_{31} b_{30} b_{29} \ldots b_2 b_1 b_0
|
||||
@@ -98,9 +98,9 @@ $$
|
||||
|
||||
根据 IEEE 754 标准,32-bit 长度的 `float` 由以下三个部分构成。
|
||||
|
||||
- 符号位 $\mathrm{S}$ :占 1 bit ,对应 $b_{31}$ 。
|
||||
- 指数位 $\mathrm{E}$ :占 8 bits ,对应 $b_{30} b_{29} \ldots b_{23}$ 。
|
||||
- 分数位 $\mathrm{N}$ :占 23 bits ,对应 $b_{22} b_{21} \ldots b_0$ 。
|
||||
- 符号位 $\mathrm{S}$ :占 1 位 ,对应 $b_{31}$ 。
|
||||
- 指数位 $\mathrm{E}$ :占 8 位 ,对应 $b_{30} b_{29} \ldots b_{23}$ 。
|
||||
- 分数位 $\mathrm{N}$ :占 23 位 ,对应 $b_{22} b_{21} \ldots b_0$ 。
|
||||
|
||||
二进制数 `float` 对应值的计算方法为:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user