java - 为什么C、C++、Java不用一补?

标签 java c++ c complement

我听说 C、C++、Java 使用两个补码来表示二进制。为什么不使用 1 补码?使用 2 个补码比使用 1 个补码有什么优势吗?

最佳答案

使用二进制补码有符号整数要简洁得多。您基本上可以添加带符号的值,就好像它们是无符号的一样,并且可以像您预期的那样工作,而不必显式处理额外的进位加法。检查一个值是否为 0 也更容易,因为二进制的补码只包含一个 0 值,而一个的补码允许定义正零和负零。

至于额外的进位加法,考虑将一个正数加到一个较小的负数上。由于 1 的补码表示,较小的负数在被视为无符号数时实际上会相当大。将两者相加可能会导致进位溢出。与无符号加法不同,这并不一定意味着该值太大而无法用补码表示,只是表示暂时超出了可用位数。为了对此进行补偿,您可以在将两个 1 的补码相加后加回进位位。

关于java - 为什么C、C++、Java不用一补?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1664751/

相关文章:

java - 我使用 insertSorted 方法对随机整数进行排序,但现在我的代码没有按应有的方式迭代 25 次,我做错了什么?

java - 如何将@Before/@BeforeClass 与@Autowired 字段一起使用

c++ - 重载<<运算符导致其模棱两可

c++ - 错误 : call of overloaded is ambiguous

c - 二叉搜索树输出文件不是预期的输出数据

c - 为什么这段代码不起作用?

java - 在 map 中存储十六进制值 .. java?

java - log4j 截断堆栈跟踪

c++ - If 语句和大括号..有/没有不同的结果

c - 如何显示数组的内容并提示用户进行选择{C}