两个补充

时间:2012-12-06 01:18:32

标签: binary int representation twos-complement

据我所知,这两个补充算法是:

  

1.以二进制表示小数。
  2.反转所有位   3.将1添加到最后一位。

对于代号为3的数字0000000000000011,两个补码的结果为1111111111111101,即-3
到现在为止还挺好。 但对于其代表为2的数字0000000000000010,两个补码的结果将为1111111111111101,而不是2而是-3。 我做错了什么?

3 个答案:

答案 0 :(得分:3)

对于你的代码,你可能需要做2的补充:我只是想把它扔出去(更快获得负二进制的方式):

2的补码对于找到二进制的值非常有用,但是我想到了解决这个问题的更简洁的方法(从未见过其他人发布过它):

取二进制,例如:1101 [假设空格“1”是符号]等于 -3

使用2的补码我们会这样做...翻转1101到0010 ...添加0001 + 0010 ===>给我们0011. 0011 in positive binary = 3.因此1101 = -3

我意识到了什么:

而不是所有翻转和添加,你可以只做基本方法求解正二进制(假设0101)是(2 3 * 0)+(2 2 * 1)+(2 1 * 0)+(2 0 * 1)= 5.

使用否定的完全相同的概念!(带小扭曲)

取1101,例如:

对于第一个数字而不是2 3 * 1 = 8 ,做 - (2 3 * 1)= - 8

然后像往常一样继续,做 -8 +(2 2 * 1)+(2 1 * 0)+(2 < sup> 0 * 1)= -3

希望这可能有所帮助!

答案 1 :(得分:1)

0...0010 // 2
1...1101 // Flip the bits
1...1110 // Add one

它也适用于否定:

1...1110 // -2
0...0001 // Flip the bits
0...0010 // Add one

答案 2 :(得分:0)

  

我做错了什么?

为第二个例子(或误解)跳过第3步。

11111111111111012的补码(即步骤1和2的结果);你需要添加1 - 不是最后一位(如二进制数字),而是最后一个结果(如第2步所示)。