【问题标题】:What does ">>=" mean in Linux kernel source code?Linux内核源代码中的“>>=”是什么意思?
【发布时间】:2012-06-28 14:07:40
【问题描述】:

在 Linux 内核源代码中,我找到以下代码:

    h++;
    pending >>= 1;

它是__do_softirq(void) 的一部分。但是“>>=”是什么意思?为什么不是我记得的“>>”? 谢谢!

【问题讨论】:

    标签: c linux kernel


    【解决方案1】:

    就是这样

    pending = pending >>1;
    

    简而言之,它将无符号整数除以 2。

    这与 +=/= 等的构造相同。

    这不仅仅是你记得的pending >>1,因为它不会将移位操作的结果存储在变量中。

    【讨论】:

    • 它将一个 unsigned 整数除以 2。 C 没有指定有符号的 int 会发生什么。在这种情况下,您最好使用 /=。
    • 是的。增加了精度。我不认为这种除以二的构造在今天真的很有用,因为所有编译器都可能在 unsigned int 上优化 /=2。您应该主要在使用 int 存储位时使用它。
    • @DougCurrie 你的意思是一个 negative 有符号整数。
    • 感谢您对“=”的详细解释!我瘦了。
    【解决方案2】:

    相当于

    pending = pending >> 1;
    

    哪个位右移pending 中的位。这将产生将无符号整数除以 2 的效果。>> 和

    【讨论】:

      猜你喜欢
      • 2018-01-14
      • 2012-02-08
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 2018-11-23
      • 2013-06-06
      相关资源
      最近更新 更多