1111 1111如何成为-1的二进制补码表示?

时间:2014-02-03 16:11:06

标签: binary twos-complement

我的书说要获得二进制补码表示,只需翻转位并添加1.如果我错了,请纠正我但是-1的二进制表示将是:

1000 0001

MSB 1表示符号(1为负数),最后1表示1来自。

所以当我翻转位时:

0111 1110

那么为什么我的书会说-1的二进制补码表示为1111 1111?我认为我在某个地方搞乱了。

3 个答案:

答案 0 :(得分:2)

这本书是对的。 1111 1111是二进制补码中-1的表示。

尝试将1添加到1111 1111.结果是:

  1111 1111 +
  0000 0001
  ---------
1 0000 0000

结果开头的“一”是“进位”。结果是你的答案:0。 乍一看,你会说溢出已经发生,但此时不会,因为结果(零)可以用8位表示。

又一个例子:

如果你将-1添加到-1,那么你应该得到-2:

  1111 1111 +
  1111 1111
  ---------
1 1111 1110

等等......

答案 1 :(得分:0)

那么为什么我的书会说-1的二进制补码表示为1111 1111?

这是因为MSB为负数,其余为正数:

1111 1111 = -128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 => -1

答案 2 :(得分:0)

如果将1111 1111的位翻转,则将其加1则得到0000 0000,则其0000 0001 = 1,但是将为-1。相反,如果要表示-1,请反过来考虑。 1表示0000 0001减去1 => 0000 0000,然后将其翻转=> 11111111。然后从上方减去-2。 2 => 00000010。减去1 => 0000 0001,将其翻转=> 1111 1110。