我的书说要获得二进制补码表示,只需翻转位并添加1.如果我错了,请纠正我但是-1的二进制表示将是:
1000 0001
MSB 1表示符号(1为负数),最后1表示1来自。
所以当我翻转位时:
0111 1110
那么为什么我的书会说-1的二进制补码表示为1111 1111?我认为我在某个地方搞乱了。
答案 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。