我正在尝试从C中的一个字节获取多个位。目前我通过移位然后位掩码(0xFF)来实现这一点,但是移位运算符需要很长时间。还有其他方法只使用按位运算吗?如果是这样的话?
谢谢!
答案 0 :(得分:2)
如果你想将特定(单个)位移动到最不重要的位置,你可以使用这样的黑客:
(x & mask) != 0
其中mask
选择单个位。
答案 1 :(得分:1)
我不敢。每个比特位置是独立的数据流。只要你被限制在这些范围内,任何逐位操作都不会使一个位影响到它自己以外的任何位置。
即使您允许基本算术,相应的操作 - 乘以2除以2的幂 - 比移位操作更慢且更不明显。
要向右移位N位,除以2 ^ N. 要向左移位N位,请乘以2 ^ N.
如果这些位每次都在同一个地方,你可以在它们所在的位置使用它们,然后移动你的面具。例如
word & 0x3FC0
会得到单词2-9(或13-6,取决于你的索引)。
然而,和以前一样,我会惊讶地发现算术比移动更快。您在转移哪个平台缓慢使用的平台?大多数处理器都将此作为机器指令。
由于您没有共享机器或应用程序的详细信息,我可以建议的是转移到最近的字节边界 - 不超过4位 - 并通过访问字节提取所需的值。如果这仍然不是一个合理的解决方案,那么我将等待正确的问题描述。