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


12

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


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

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

Answers:


19

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

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

  • ,使 - 4 = 111110114=00000100−4=11111011

  • ,使 - 0 = 11111111。0=00000000−0=11111111

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

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

  • ,在1的补数为 11111011变为 11111100−41111101111111100
  • −01111111100000000

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

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

  • −27+127−1
  • −2727−1

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

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

3

0…01…1−0


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

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

3

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

0−00=−00

00…01…1

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.