我正在尝试学习二进制数系统,而且几乎是非常新的。我刚刚完成了一些关于二进制数转换,加法,减法等基本知识的章节。
但是现在我看到了一个关于1的补码和2的补码的章节。我知道什么是有符号数字,有符号大小,以及如何在内存中存储8位,16位等二进制数字,但问题是我不能理解为什么1的补码和2的补码。还有,为什么我们应该使用2的补码,为什么它更好,等等。
我正在遵循一本书,书中有一条将1的补码和2的补码转换的指南。但是没有解释为什么1的补码和2的补码。
所以我需要一些帮助来更深入地理解它。任何关于二进制数系统等的书籍建议都是值得感谢的。
提前感谢罗宾
发布于 2016-01-19 17:49:29
1的补码只是简单的按位非(即001变成110),这最终会给你两个0 (111和000),所以当你用不同的符号进行数字的加法时(无论何时你越过0),你都需要小心。然而,在硬件中实现求反非常简单(它是一个单独的并行操作)。
2s补码调整范围,所以你的负数比正数多一个(对于8位数,你的范围是-128到127),但是你不需要考虑任何事情,你只有一个零。对一个数字求反的代价稍高一些(一个并行的位翻转,然后是加法),但这可能会被简单得多的加法电路所补偿。
符号位简单地使用最高位来表示负或正。它基本上具有1补码的所有缺点。对一个数字求反非常简单(翻转比特)
还有偏移量数字,其中“所有位0”数字实际上表示“最负的数字”,“只有最高的位0”表示“数字零”。例如,如果您正在使用数字来控制物理对象的位移(全零一直到一端,全一一直到另一端,而“零”在中间),这可能很吸引人。
发布于 2016-01-18 19:09:53
1的补码只是一个位非门,即1011变成0100。
2的补码是最常用的有符号整数的表示,因为它遵循加法和的规则,subtraction.If你把1加到1111上,得到0000。因此,1111应为-1。
发布于 2016-01-18 19:59:08
你可以使用任何系统,但有些系统有优缺点。
1的补码非常容易理解,但不提供统一的算术(当你想把两个数相加时,你必须根据操作数的符号来区分不同的大小写),所以在硬件上实现它的成本太高了。另一个问题是存在两个0(一个负一个正)。
2的补码稍难理解,但提供了一个非常简单的统一算法,您只需以相同的方式将数字相加,无论数字的符号是什么(例如)。因此,实现它会带来更便宜/更小的硬件。
https://stackoverflow.com/questions/34852691
复制相似问题