我试图在不使用比较运算符的情况下检查数字是否定的。我试图检查最重要的一点。我正在做以下事情:
int x = -5;
Console.WriteLine(x >> 31);
我期待输出为1
。但我得到-1
。是什么解释了这种行为?
答案 0 :(得分:6)
这是因为>>
上的运算符int
表现为算术移位:“推入”的位采用符号位的值(0或者在你的情况下1,1)。因此,您获得的结果是0xFFFFFFFF
,即-1
。
来自MSDN:
如果第一个操作数是int或long,则右移是a 算术移位(高位空位设置为符号位)。如果 第一个操作数是uint或ulong类型,右移是a 逻辑移位(高位比特为零)。
如果你这样做:
Console.WriteLine((uint)x >> 31);
这是逻辑移位,较高的位用0
填充,输出是您期望的输出:1
。