提交 81ab02a3 编写于 作者: K Kind Jeff 提交者: GitHub

Update ch5.md

上级 f5421d26
...@@ -14,7 +14,7 @@ ...@@ -14,7 +14,7 @@
对于负数,最清晰的表示法使用符号位来表明一个数是正数还是负数。但是还有另一种表示法,叫做“补码”(two's complement),它更加普遍,因为它和硬件配合得更好。 对于负数,最清晰的表示法使用符号位来表明一个数是正数还是负数。但是还有另一种表示法,叫做“补码”(two's complement),它更加普遍,因为它和硬件配合得更好。
为了寻找一个正数的补码,`-x`,需要找到`x`的二进制表示,将所有位反转,之后加上1。例如,要表示十进制的`-5`,要先从十进制的5开始,如果将其写成8位的形式它是`0b0000 0101`。将所有位反转并加以会得到`0b1111 1011` 为了寻找一个负数`-x`的补码,需要找到`x`的二进制表示,将所有位反转,之后加上1。例如,要表示`-5`(十进制),要先从5(十进制)开始,如果将其写成8位的形式它是`0b0000 0101`。将所有位反转并加1会得到`0b1111 1011`
在补码中,最左边的位相当于符号位。正数中它是0,负数中它是1。 在补码中,最左边的位相当于符号位。正数中它是0,负数中它是1。
...@@ -48,7 +48,7 @@ C语言中,这意味着表达式`12 & 10`值为8。 ...@@ -48,7 +48,7 @@ C语言中,这意味着表达式`12 & 10`值为8。
所以表达式`12 | 10`值为14。 所以表达式`12 | 10`值为14。
最后,`^`运算符执行“异或”运算,如果两个操作数其中有一个为1,而不是全部为1,结果为1。 最后,`^`运算符执行“异或”运算,如果两个操作数有且仅有一个为1,结果为1。
``` ```
1100 1100
...@@ -97,9 +97,9 @@ C语言同时提供了移位运算符,`<<`和`>>`,它可以将位向左或 ...@@ -97,9 +97,9 @@ C语言同时提供了移位运算符,`<<`和`>>`,它可以将位向左或
(-1) ** s * c * 2 ** q (-1) ** s * c * 2 ** q
``` ```
这几乎是正确的,但是有一点例外。浮点数通常为规格化的,所以小数点前方有一个数字。例如在10进制中,我们通常使用`2.998 * 10 ** 8`而不是`2998 * 10 ** 5`,或者任何其它等价的表示。在二进制中,规格化的浮点数通常在二进制小数点前有一个数字1。由于这个位置上的数字永远是1,我们可以将其从表示中去掉以节省空间。 这几乎是正确的,但是有一点例外。浮点数通常为规格化的,所以小数点前方有一个数字。例如在10进制中,我们通常使用`2.998 * 10 ** 8`而不是`2998 * 10 ** 5`,或者任何其它等价的表示。在二进制中,规格化的浮点数总是在二进制小数点前有一个数字1。由于这个位置上的数字永远是1,我们可以将其从表示中去掉以节省空间。
例如,十进制的13表示为`0b1101`,在浮点数中,它就是`1.011 * 2 ** 3`。所以指数为3,系数储存为101(加上20个零)。 例如,十进制的13表示为`0b1101`,在浮点数中,它就是`1.101 * 2 ** 3`。所以指数为3,系数储存为101(加上20个零)。
这几乎是正确的,但是指数以“偏移”储存。在32位的标准中,偏移是127,所以指数3应该储存为130。 这几乎是正确的,但是指数以“偏移”储存。在32位的标准中,偏移是127,所以指数3应该储存为130。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册