为什么C,C++,Java不使用一个补码?

3 c c++ java complement

我听说C,C++,Java使用两个补码进行二进制表示.为什么不使用1补充?使用2补语超过1补语是否有任何优势?

cop*_*kin 8

使用两个补码有符号整数更加清晰.您基本上可以添加签名值,就好像它们是未签名的并且可以按预期工作,而不必明确处理额外的进位添加.检查值是否为0也更容易,因为两个补码仅包含一个0值,而一个补码允许一个定义正零和负零.

至于额外的进位增加,考虑将正数加到一个小的负数上.由于一个补码的表示,当看作无符号数量时,小的负数实际上相当大.将两者相加可能会导致进位溢出.与无符号加法不同,这并不一定意味着该值太大而无法表示在一个补码中,只是表示暂时超过了可用的位数.为了弥补这一点,在将两个补码相加后,将进位加回.

  • tsubasa,你需要做自己的功课. (5认同)

Car*_*rum 7

数字的内部表示不是任何一种语言的一部分,它是机器本身的体系结构的一个特征.大多数实现使用2的补码,因为它使加法和减法具有相同的二进制运算(有符号和无符号运算是相同的).

  • @Carl - 实际上,对于Java来说,整数**的表示是**语言规范的一部分. (2认同)