按位运算,x*x<0怎么办?

Bitwise arithmetic, How can x*x<0?

我正在复习涉及按位运算的考试,发现了一个有用的页面,其中有一个我感到困惑的问题。 http://www.cs.cmu.edu/afs/cs/academic/class/15213-f05/lectures/class03.txt

具体问题在页面底部'Puzzles'下。给定一个有符号整数 x,并假设一个 32 位字长和 2 的补码,我们如何证明

x*x <0?

他们将 50000 列为可能的解决方案,但我不确定为什么或如何工作。

考虑到 3*3 = 9、0011 * 0011 = 1001,我尝试从小开始。 移动到 2 个半字节,0010 0001 * 0010 0010 = 34*34 = 1156 = 100 [1000 0100] 并且认为我发现了一种增加 1 位之间间隔的模式,但是当我接近 32 位时它不起作用。

谁能指出我正确的方向?

在2的补码中,最高位表示数字的符号。如果您对正数进行算术运算,最终将带入该特定位,则最终将得到一个负数。

例如:

         50 000 = 0b00000000000000001100001101010000
50 000 * 50 000 = 0b10010101000000101111100100000000

最高有效位设置为 1,因此当解释为 有符号值.

时,结果数字被视为负数

下面是上述想法的快速演示:https://ideone.com/TU049L