寻求有关移位位如何验证数字符号的解释

Seeking explanation of how shifting bits can verify the sign of a number

我有这段来自 geeksforgeeks 的摘录,假设 x 和 y 是整数。

“如果(x-y)小于0,则(x-y)>>31为1。如果(x-y)大于等于0,则(x-y)>>31为1。为 0。”

我很好奇为什么会这样。

two's complement 形式的有符号 32 位整数就是这种情况。

符号位是最高有效位。移位操作 >>31 会将符号位移动到最低有效位位置。 1 表示差异为负。

引述假设整数的 32 位二进制补码表示(这是最常见的整数表示,尽管使用 64 位正变得越来越普遍)。特别地,在用于表示整数的 32 位中,最高位用于表示整数是负数还是正数。最高位 = 1 表示负数,最高位 = 0 表示非负数。因此,如果您计算 (x-y) 并且第 32 位告诉您是 x >= y(第 32 位 = 0)还是 x < y(第 32 位 = 1)。那么如何获得第 32 位呢?右移 31 次。