原码和补码

原码和补码创建于 2024年05月31日

更新于 2024年05月31日为什么要引入补码?二进制原码表示法二进制补码表示法如何快速的计算补码表示的十进制数为什么要引入补码?通俗来讲,在计算机中使用原码进行计算,不好用。

使用补码的优势:

统一了加法和减法:使用补码,计算机可以用相同的加法硬件来处理减法,这简化了硬件设计。对于任何两个数,无论它们是正是负,都可以直接进行加法操作,而不需要判断操作数的正负。消除了负零的概念:在补码表示法中,只有一个零(+0 和 -0 都表示为 000),这避免了在其他数值表示法中可能出现的正零和负零的区别。提高了负数表示的范围:在固定位宽的情况下,补码能表示的负数比其他表示法(如原码或反码)多一个。例如,在 8 位二进制中,补码可以表示从 -128 到 +127 的整数,而原码和反码只能表示从 -127 到 +127。简化了计算机的逻辑设计:由于补码的特性,许多逻辑和算术运算(如加法、减法、比较)都可以用更简单的逻辑电路来实现。先以原码表示法,来体验一下。

二进制原码表示法假设有 3 位 bit ,则能表示的所有状态为共有 8 中:

000001010011100101110111把 000 用来表示 0:

000 = 0把其余 0 开头的用来表示正数:

001 = 1010 = 2011 = 3把 1 开头的用来表示负数:

100 = -0101 = -1110 = -2111 = -3缺点之一:是 000 和 100 都用来表示十进制数 0,其中 100 即负态的零。

000 (表示 +0)+ 100 (表示 -0)------ 100 (表示 -0)缺点之二,是计算结果不正确。

010 (表示 +2)+ 101 (表示 -1)------ 111 (表示 -3)二进制补码表示法0 和正数的表示不变

把 000 用来表示 0:

000 = 0把其余 0 开头的用来表示正数:

001 = 1010 = 2011 = 3负数的表示需要做出一些改变,改变的核心有两点:

消除负态零保证计算结果正确把 1 开头的用来表示负数:

100 = -4101 = -3110 = -2111 = -1由于把 1 开头的 4 中状态,分别用来表示 -1 ~ -4,负态零的问题得到了解决。

关于计算结果是否正确,如下:

010 (表示 +2)+ 101 (表示 -3)------ 111 (表示 -1)可以看到计算结果正确。

如何快速的计算补码表示的十进制数101 可以拆分为 100 和 001,把它们加起来就能得到它所表示的十进制数,即 -4 + 1 = -3。

[an error occurred while processing the directive]