我听说 C、C++、Java 使用两个补码来表示二进制。为什么不使用 1 补码?使用 2 个补码比使用 1 个补码有什么优势吗?
最佳答案
使用二进制补码有符号整数要简洁得多。您基本上可以添加带符号的值,就好像它们是无符号的一样,并且可以像您预期的那样工作,而不必显式处理额外的进位加法。检查一个值是否为 0 也更容易,因为二进制的补码只包含一个 0 值,而一个的补码允许定义正零和负零。
至于额外的进位加法,考虑将一个正数加到一个较小的负数上。由于 1 的补码表示,较小的负数在被视为无符号数时实际上会相当大。将两者相加可能会导致进位溢出。与无符号加法不同,这并不一定意味着该值太大而无法用补码表示,只是表示暂时超出了可用位数。为了对此进行补偿,您可以在将两个 1 的补码相加后加回进位位。
关于java - 为什么C、C++、Java不用一补?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1664751/