1

我正在尝试学习二进制数系统并且几乎是非常新的。我刚刚用一些基本的东西完成了一些关于二进制数对话、加法、减法等的章节。

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

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

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

提前致谢 罗宾

4

3 回答 3

2

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

2 的补码最常用于表示有符号整数,因为它遵循加减法规则。如果将 1 加到 1111,则得到 0000。因此 1111 应该是 -1。

于 2016-01-18T11:09:53.110 回答
0

您可以使用任何系统,但有些系统有缺点或优点。

1 的补码很容易理解,但不提供统一的算术运算(当您想要添加两个数字时,您必须根据操作数的符号区分不同的情况),因此在硬件中实现它的成本太高。另一个问题是存在两个0(一个负一个和一个正一个)。

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

于 2016-01-18T11:59:08.060 回答
0

1s 补码只是按位非(即 001 变为 110),这最终会给您两个零(111 和 000),因此在执行具有不同符号的数字相加时需要小心(以及每当您越过 0 )。然而,在硬件中实现取反非常简单(它是单个并行操作)。

2s 补码调整范围,因此负数比正数多一个(对于 8 位数字,您的范围是 -128 到 127),但您不必考虑任何事情,您只有一个零。取反一个数字稍微贵一些(一个并行位翻转,然后是一个加法),但这可能会通过更简单的加法电路来补偿。

符号位仅使用最高位来表示负或正。它基本上具有 1s 补码的所有缺点。否定一个数字非常简单(翻转位)

还有偏移数字,其中“所有位 0”数字实际上表示“最大负数”,“只有最高位 0”表示“数字零”。例如,如果您使用数字来控制物理物体的位移,这可能很有吸引力(全零一直到一端,全一一直到另一端,“零”在中间) .

于 2016-01-19T09:49:28.890 回答