关于原码、反码和补码的介绍

原码、反码和补码的概念

参考

找出负数的补码、以及负数的补码表示的负数的两种方法

数的补码的常见问题是找一个数的补码,以及根据补码找出它表示的数。

由于正数的补码和原码、反码都是一样的,在十进制和二进制之间转换就可以解决上述两个问题。

难点在负数上面。一个负数的补码是什么,以及一个表示负数的补码到底表示的是哪个负数。

还好,有两种方法可以同时解决这两个问题。

为了演示这两种方法,我们先给出用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
经验分享 程序员 微信小程序 职场和发展