右移运算符用于检查数字否定性

时间:2014-03-23 15:50:12

标签: c# bit-manipulation

我试图在不使用比较运算符的情况下检查数字是否定的。我试图检查最重要的一点。我正在做以下事情:

int x = -5;
Console.WriteLine(x >> 31);

我期待输出为1。但我得到-1。是什么解释了这种行为?

1 个答案:

答案 0 :(得分:6)

这是因为>>上的运算符int表现为算术移位:“推入”的位采用符号位的值(0或者在你的情况下1,1)。因此,您获得的结果是0xFFFFFFFF,即-1

来自MSDN

  

如果第一个操作数是int或long,则右移是a   算术移位(高位空位设置为符号位)。如果   第一个操作数是uint或ulong类型,右移是a   逻辑移位(高位比特为零)。

如果你这样做:

Console.WriteLine((uint)x >> 31);

这是逻辑移位,较高的位用0填充,输出是您期望的输出:1