原码、反码和补码的概念
找出负数的补码、以及负数的补码表示的负数的两种方法
数的补码的常见问题是找一个数的补码,以及根据补码找出它表示的数。
由于正数的补码和原码、反码都是一样的,在十进制和二进制之间转换就可以解决上述两个问题。
难点在负数上面。一个负数的补码是什么,以及一个表示负数的补码到底表示的是哪个负数。
还好,有两种方法可以同时解决这两个问题。
为了演示这两种方法,我们先给出用4个比特进行补码编码的样本:
| 无符号 | 二级制 | 有符号 |
|---|---|---|
| 7 | 0111 | 7 |
| 6 | 0110 | 6 |
| 5 | 0101 | 5 |
| 4 | 0100 | 4 |
| 3 | 0011 | 3 |
| 2 | 0010 | 2 |
| 1 | 0001 | 1 |
| 0 | 0000 | 0 |
| 15 | 1111 | -1 |
| 14 | 1110 | -2 |
| 13 | 1101 | -3 |
| 12 | 1100 | -4 |
| 11 | 1011 | -5 |
| 10 | 1010 | -6 |
| 9 | 1001 | -7 |
| 8 | 1000 | -8 |
方法1.
找出负数的补码
先找出作为它相反数的正数的补码,得到正数补码后,从低位向高位搜寻第一个1,第一个1和前面的低位比特(都是0)不变,而1后面的所有更高位比特取反(0变成1,1变成0),就得到原负数的补码了。比如,找-4的补码,先找4的补码,为0100,从低位向高位找1,为100,不变,后面的更高位取反,得到1100,它就是-4的补码。
| 3 | 2 | 1 | 0 | |
|---|---|---|---|---|
| 4的补码 | 0 | 1 | 0 | 0 |
| ↓ | 取反 | 不变 | 不变 | 不变 |
| -4的补码 | 1 | 1 | 0 | 0 |
根据补码确定它表示哪个负数
由负数的补码判定它表示哪个负数的过程和上述过程类似,从低位向高位搜寻第一个1,第一个1和前面的低位比特(都是0)不变,而1后面的高位比特取反(0变成1,1变成0),会得到一个正数的补码。那么原先的补码表示的负数就是这个正数的相反数。比如,补码为1100,显然最高位为1,是负数的补码,从低位向高位找1,为100,不变,后面的更高位取反,得到0100,是4的补码,于是1100就是-4的补码。
| 3 | 2 | 1 | 0 | |
|---|---|---|---|---|
| 负数的补码 | 1 | 1 | 0 | 0 |
| ↓ | 取反 | 不变 | 不变 | 不变 |
| 为4的补码,说明1100为-4的补码 | 0 | 1 | 0 | 0 |
方法2.
找出负数的补码
先找出作为它相反数的正数的补码,得到正数补码后,对他进行取反,得到的二进制数再加1,即为该负数的补码。比如,找-4的补码,先找4的补码,为0100,取反,得到1011,再加1,得到1100,即为-4的补码。
| 3 | 2 | 1 | 0 | |
|---|---|---|---|---|
| 4的补码 | 0 | 1 | 0 | 0 |
| ↓ | 取反 | 取反 | 取反 | 取反 |
| 取反结果 | 1 | 0 | 1 | 1 |
| 加1 | 0 | 0 | 0 | 1 |
| -4的补码 | 1 | 1 | 0 | 0 |
根据补码确定它表示哪个负数
由负数的补码判定它表示哪个负数的过程与上述过程类似,把表示负数的补码取反,加1,得到正数的补码,那么原先的补码表示的负数就是这个正数的相反数。
| 3 | 2 | 1 | 0 | |
|---|---|---|---|---|
| 补码 | 1 | 1 | 0 | 0 |
| ↓ | 取反 | 取反 | 取反 | 取反 |
| 取反结果 | 0 | 0 | 1 | 1 |
| 加1 | 0 | 0 | 0 | 1 |
| 为4的补码,说明1100为-4的补码 | 0 | 1 | 0 | 0 |
本文详细介绍了原码、反码和补码的概念,并提供了两种找到负数补码及其对应负数的方法。通过示例,解释了如何通过补码判断其代表的负数以及如何计算负数的补码。

2万+

被折叠的 条评论
为什么被折叠?



