0如何在一个补码中具有两个值?


12

据说2的补码中只有0个值,而1的补码中+0和-0都有单独的值。这些是什么?


8
0没有两个值。它的值为0。它的补码确实具有两个表示。但这并不是唯一的东西。例如,数字10以十进制表示的无限多个表示形式:10,+ 10、010,+ 010、0010,+ 0010等。
约尔格W¯¯米塔格

究竟。该仅是等价类的陈述,以及什么叫做“值0”恰好是含有一个等价类000...0111...1。但是,这两种表示形式仍然仅构成一个值。
leftaboutabout

Answers:


19

1的补码就可以反转所有位。

考虑以下两个示例(假设8位):

  • ,使 - 4 = 111110114=000001004=11111011

  • ,使 - 0 = 111111110=000000000=11111111

所以你有2种方式来表示数字0

2的补码中,将1加到负数的1的补码表示中

  • ,在1的补数为 11111011变为 1111110041111101111111100
  • 01111111100000000

因此,在这种情况下,您只有一种方式来表示0

从示例中可以看到,区别在于:

  • 27+1271
  • 27271

7
可能值得一提的,即使您不详细介绍2的补码,范围内也只有2个补码才具有更多的优势。
KRyan

7
最好在此注释部分中提及上述优点之一:主要优点之一是仅通过假装未签名的数字并将其相加即可实现减法(/加上负数)。减法无需特殊情况=更简单的电路和逻辑。此页面上有关于该主题的出色文章。
Jason C

3

00110


可以通过环绕进位来补充加法或减法。当然,向程序员显示的内容不一定是基础表示。
ttw

1
@ttw这个问题询问零的两种表示形式是什么,所以我不确定加,减和程序员在哪里出现。
David Richerby

3

说一个补码中两个不同的0 会产生误导。一个补码(和两个补码)是数字的二进制表示。他们描述了一种用二进制表示数字的方法,以及如何对它们进行算术运算。由位序列表示的数字是值。

000=00

00011

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.