从一个字节中获取没有移位的位

时间:2016-02-08 23:24:58

标签: c bit-shift boolean-logic boolean-expression

我正在尝试从C中的一个字节获取多个位。目前我通过移位然后位掩码(0xFF)来实现这一点,但是移位运算符需要很长时间。还有其他方法只使用按位运算吗?如果是这样的话?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果你想将特定(单个)位移动到最不重要的位置,你可以使用这样的黑客:

(x & mask) != 0

其中mask选择单个位。

答案 1 :(得分:1)

我不敢。每个比特位置是独立的数据流。只要你被限制在这些范围内,任何逐位操作都不会使一个位影响到它自己以外的任何位置。

即使您允许基本算术,相应的操作 - 乘以2除以2的幂 - 比移位操作更慢且更不明显。

要向右移位N位,除以2 ^ N. 要向左移位N位,请乘以2 ^ N.

如果这些位每次都在同一个地方,你可以在它们所在的位置使用它们,然后移动你的面具。例如

word & 0x3FC0

会得到单词2-9(或13-6,取决于你的索引)。

然而,和以前一样,我会惊讶地发现算术比移动更快。您在转移哪个平台缓慢使用的平台?大多数处理器都将此作为机器指令。

由于您没有共享机器或应用程序的详细信息,我可以建议的是转移到最近的字节边界 - 不超过4位 - 并通过访问字节提取所需的值。如果这仍然不是一个合理的解决方案,那么我将等待正确的问题描述。