【问题标题】:Trying to test if bit 1 of a byte is turned? Bit shifting试图测试一个字节的第 1 位是否被翻转?位移位
【发布时间】:2019-03-24 03:18:25
【问题描述】:

我有一个字节,我想测试一下 Bit 1 是否打开。

我写的条件是:if(byte & (1 << 0)) return true;

困惑:我不明白如何读取一个字节。

这是第 1 位吗? 即。 (1

00000000
       ^

还是这个? (1

00000000
      ^ 

换句话说,我们是从 0 -7 还是 1 - 8 读取一个字节?

【问题讨论】:

标签: c bit-manipulation bit bit-shift


【解决方案1】:

在计算机科学中,计数总是从 0 开始。所以第 0 位是最右边的一位。这就是为什么在that answer 的示例中,110 (6) << 1 变为1100 (12)。这也意味着移位 0 是一个空操作(它什么都不做)。

这也意味着,对于您的情况,如果您想测试最右边的位,您只需 byte & 1 - 无需移位。

【讨论】:

  • 感谢您的回答。只是为了澄清我的理解。我们从 0 到 - 7 计算一个字节。最右边的位称为第 0 位......如果我想打开第 1 位 - 我们在语义上谈论的是第 2 位(如果从 1 到 8 计数)?
  • 是的,你没看错,字节中的位将被索引[7 6 5 4 3 2 1 0](例如第一位,索引0,第二位索引1,等等...) .
  • 我明白了。还试图理解你回答中的最后一个例子:说如果我有; if (packet & (1
  • 是的,没错。将位视为桌子上的一组块,您只能看到右侧的块。每当您想查看任何其他块时,都必须将它们向左或向右移动以专注于不同的块。因此,如果您从关注右侧的第一位开始,您必须移动 3 次才能看到右侧的第四位。但是,为了避免在与其他开发人员交谈时产生混淆,我建议您采用从 0 开始的术语,因为它是最完善的,每个人都会理解您的意思。
猜你喜欢
  • 1970-01-01
  • 2022-07-15
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
相关资源
最近更新 更多