补码用于数字计算机中,以简化减法运算并进行逻辑运算。对于二进制数(以2为基)的系统,补码有两种类型:1的补码和2的补码。
有一个简单的算法可以将二进制数转换为1的补码。要获得二进制数的1的补码,只需反转给定数字即可。
有一个简单的算法可以将二进制数转换为2的补码。要获得二进制数的2的补码,只需反转给定数字并将1加到给定结果的最低有效位(LSB)。
这些差异如下所示-
1的补码 | 2的补码 |
---|---|
要获得二进制数的1的补码,只需反转给定数字即可。 | 要获得二进制数的2的补码,只需反转给定数字并将1加到给定结果的最低有效位(LSB)。 |
二进制数110010的1的补码为001101 | 二进制数110010的2的补码为001110 |
简单的实现,每个输入位仅使用非门。 | 对每个输入位使用NOT门和全加法器。 |
可以用于带符号的二进制数字表示形式,但不适合用作数字0的模糊表示形式。 | 可用于带符号的二进制数字表示形式,最适合作为所有数字的明确表示形式。 |
0具有两个不同的表示形式,一个是-0(例如,五位寄存器中的1 1111),第二个是+0(例如,五位寄存器中的0 0000)。 | 0仅表示-0和+0(例如,五位寄存器中的0 0000)。零始终为正(符号位为0) |
对于k位寄存器,可以存储的最大正数为(2 (k-1) -1),可以存储的最小负数为-(2 (k-1) -1)。 | 对于k位寄存器,可以存储的最大正数为(2 (k-1) -1),可以存储的最小负数为-(2 (k-1))。 |
1的补码算术运算中会发生“末位携带位” 加法。它添加到结果的最低位。 | 2的补码算术运算中不会发生末尾携带位 加法。它被忽略。 |
1的补码算术运算不比2的补码更容易,因为增加了末尾进位位。 | 2的补码算术运算比1的补码容易得多,这是因为不增加末尾携带位。 |
符号扩展用于将带符号的整数从一种大小转换为另一种大小。 | 符号扩展用于将带符号的整数从一种大小转换为另一种大小。 |