0

Hacker 高兴的x是,有一个计算as绝对值的例子(х XOR (x >> 31)) - (x >> 31)

我知道x >> 31返回的符号x。我了解布尔代数,但它是如何(х XOR (x >> 31)) - (x >> 31)工作的?

4

2 回答 2

1

它遵循二进制补码的定义,-x = ~x + 1

如果x是负数:y = x>>31 = -1~x将求逆重写为x ^ -1,并将+1重写为 ,-1得到:

-x = (x ^ -1) - -1 = abs(x)

Ifx是非负数:y = 0,并且(x ^ 0) - 0)显然只是x

于 2014-03-25T12:41:42.423 回答
0

(x XOR y) - y 只是对负数进行 2 的补码。对于正数,y 将为 0,因此 x 保持不变。

例子。x = -2。

-2 表示为 0xFFFFFFFE

x>>31 将使 y = 0xFFFFFFFF (即-1)

x XOR y 将翻转 x 中的所有位,结果为 0x00000001

(x XOR y) - y = 0x00000001 - (-1) = 0x00000002。

于 2014-03-25T12:30:52.767 回答