1的补码和2的补码在二进制中的重要性是什么

What is the importance of 1's complement and 2's complement in Binary

我正在尝试学习二进制数系统并且几乎是全新的。我刚刚完成了关于二进制数转换、加法、减法等的一些基本内容的章节。

但是现在看到一章讲1的补码和2的补码。我知道什么是有符号数、有符号大小以及二进制数字如何以 8 位、16 位等形式存储在内存中。但问题是我不明白为什么 1 的补码和 2 的补码。还有为什么我们应该使用 2 的补码以及为什么它更好等

我正在看一本书,它有转换为 1 的补码和 2 的补码的指南。但是没有解释为什么1的补码和2的补码。

所以我需要一些帮助来更深入地理解它。任何有关二进制数字系统等的书籍建议都将受到赞赏。

提前致谢 罗宾

1的补码只是一个按位非门,即1011变为0100。

2 的补码 最常用于表示 有符号整数 因为它遵守加法和 subtraction.If 的规则你在 1111 上加 1,你得到 0000。因此 1111 应该是 -1。

您可以使用任何系统,但有些系统各有利弊。

1的补码很容易理解,但是没有提供统一的算法(当你想将两个数字相加时,你必须根据操作数的符号来区分不同的情况)所以用硬件实现它太昂贵了。另一个问题是存在两个0(一个负数和一个正数)。

2 的补码稍微难以理解,但提供了一个非常简单的统一算法,无论数字的符号是什么,您只需以相同的方式添加数字(例如)。因此实施它会导致 cheaper/smaller 硬件。

1s 的补码只是按位取反(即 001 变成 110),这最终会给你两个零(111 和 000),所以当你对不同符号的数字进行加法时需要小心(每当你越过 0)。然而,在硬件中实现否定非常简单(它是一个并行操作)。

2s 补码调整范围,所以你的负数比正数多一个(对于 8 位数字,你的范围是 -128 到 127),但你不必考虑任何事情,你只有一个零。取负一个数的成本稍高(一个并行 bit-flip,然后是一个加法),但这可能可以通过更简单的加法电路来弥补。

Sign-bit 简单地使用最高位来表示负或正信号。它基本上具有 1 补码的所有缺点。求一个数的负数(翻转位)非常简单

还有偏移数字,其中 "all bits 0" 数字实际上表示 "the most negative number",而 "only the highest bit 0" 表示 "the number zero"。这可能很有吸引力,例如,如果您正在使用数字来控制某些物理事物的位移(所有零一直到一端,所有零一直到另一端并且 "zero" 在中间)。