【问题标题】:Sleep while bit NOT set位未设置时休眠
【发布时间】:2012-06-22 20:32:00
【问题描述】:

我该如何做相反的事情:

while((*i2s) & (1<<19))
    usleep(10);

我想在第 19 位为 0 时继续休眠。

【问题讨论】:

  • while(((*i2s) &amp; (1&lt;&lt;19)) == 0)
  • 我们真的需要 4 个不同的答案吗?只需要一条评论。这甚至不应该是一个问题。
  • 我用谷歌搜索“虽然位未设置”并没有得到一个好的答案,现在如果你这样做,这个问题就是最佳答案!堆栈平台很棒!
  • RTFM 更棒。

标签: c


【解决方案1】:
while(((*i2s) & (1<<19)) == 0)
    usleep(10);

当然。

【讨论】:

    【解决方案2】:

    ! not 运算符反转条件:

    while(!((*i2s) & (1 << 19))) {
        usleep(10);
    }
    

    【讨论】:

    • 虽然正确,但读起来并不容易。在 Daniel 的版本中,您希望该位为 0 更清楚。
    • 你想要的是条件为假;因此 !更清晰。
    【解决方案3】:

    要执行相反的操作,请使用 !

    while(!((*i2s) & (1<<19)))
       usleep(10);
    

    【讨论】:

      【解决方案4】:

      使用 ! 运算符将否定您的表达式:

      while(!((*i2s) & (1<<19)))
          usleep(10);
      

      【讨论】:

        猜你喜欢
        • 2021-06-15
        • 1970-01-01
        • 2013-03-06
        • 1970-01-01
        • 2015-03-16
        • 1970-01-01
        • 2012-02-05
        • 2013-12-14
        相关资源
        最近更新 更多