mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-01 09:43:33 +08:00
build
This commit is contained in:
@@ -39,7 +39,7 @@ comments: true
|
||||
|
||||
**Q**:原码转补码的方法是“先取反后加 1”,那么补码转原码应该是逆运算“先减 1 后取反”,而补码转原码也一样可以通过“先取反后加 1”得到,这是为什么呢?
|
||||
|
||||
**A**:这是因为原码和补码的相互转换实际上是计算“补数”的过程。我们先给出补数的定义:假设 $a + b = c$ ,那么我们称 $a$ 是 $b$ 到 $c$ 的补数,反之也称 $b$ 是 $a$ 到 $c$ 的补数。
|
||||
这是因为原码和补码的相互转换实际上是计算“补数”的过程。我们先给出补数的定义:假设 $a + b = c$ ,那么我们称 $a$ 是 $b$ 到 $c$ 的补数,反之也称 $b$ 是 $a$ 到 $c$ 的补数。
|
||||
|
||||
给定一个 $n = 4$ 位长度的二进制数 $0010$ ,如果将这个数字看作原码(不考虑符号位),那么它的补码需通过“先取反后加 1”得到:
|
||||
|
||||
@@ -67,4 +67,4 @@ $$
|
||||
|
||||
本质上看,“取反”操作实际上是求到 $1111$ 的补数(因为恒有 `原码 + 反码 = 1111`);而在反码基础上再加 1 得到的补码,就是到 $10000$ 的补数。
|
||||
|
||||
上述 $n = 4$ 为例,其可推广至任意位数的二进制数。
|
||||
上述以 $n = 4$ 为例,其可被推广至任意位数的二进制数。
|
||||
|
||||
Reference in New Issue
Block a user