【问题标题】:Right shift operator used for checking number negativity用于检查数字负性的右移运算符
【发布时间】:2014-03-23 15:50:12
【问题描述】:

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

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

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

【问题讨论】:

  • 这必须是重复的。让我去找一个.. 编辑:实际上找不到一个好的骗子。但是这个问题的答案应该会有所帮助:stackoverflow.com/q/1499647
  • 右移运算符将其第一个操作数右移第二个操作数 (MDSN) 指定的位数。它涉及位,我认为我没有为您提供最好的解释,但我相信这篇文章可以帮助您 - MDSN
  • 请不要在问题标题中包含有关所用语言的信息,除非没有它就没有意义。标记用于此目的。

标签: c# bit-manipulation


【解决方案1】:

这是因为 int 上的运算符 >> 表现为 算术 移位:“推入”的位采用符号位的值(0 或 1,1你的情况)。所以你得到的结果是0xFFFFFFFF,也就是-1

来自MSDN

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

如果你这样做:

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

这是一个逻辑移位,高位用0填充,输出是你期望的:1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多