Aad*_*mia 4 c# bit-manipulation
我试图检查一个数字是负数而不使用比较运算符.我试图检查最重要的一点.我正在做以下事情:
int x = -5;
Console.WriteLine(x >> 31);
Run Code Online (Sandbox Code Playgroud)
我期待输出1.但我明白了-1.什么解释了这种行为?
这是因为运算符>>上的运算符int表示算术移位:"推入"的位采用符号位的值(在您的情况下为0或1,1).所以你得到的数字是0xFFFFFFFF,即-1.
来自MSDN:
如果第一个操作数是int或long,则右移是算术移位(高位空位设置为符号位).如果第一个操作数是uint或ulong类型,则右移是逻辑移位(高位是零填充).
如果你这样做:
Console.WriteLine((uint)x >> 31);
Run Code Online (Sandbox Code Playgroud)
这是一个逻辑移位,高位填充0,输出是您所期望的:1.