从字节中提取位的效率

时间:2013-03-20 02:41:45

标签: c++ c bit-manipulation bitset

我从C中的一个字节中提取第8位。这是我的例子。

register unsigned char byte;

int pos = 7;

int x =(byte >> pos) & 1;   //Method I

int y =(byte & 0x80) >> pos;    //Method II

这两种技术都会产生相同的输出,但是其中一种方法比另一种更有效吗?

3 个答案:

答案 0 :(得分:4)

两者都是一样的。 AND和SHR指令都是intel CPU上的1时钟指令。

答案 1 :(得分:1)

按位操作基本上是您在计算机上找到的最快的东西之一。我想,任何不同之处都是令人难以置信的次要的,这样做并不重要。

答案 2 :(得分:1)

如果您知道在编译时提取的位,那么任何一种方法都应具有大致相同的速度:

unsigned char val;
const int pos = 4;
...
int x = (val >> pos) & 1;
int y = (val & 0x10) >> pos;

但是,如果您在运行时计算位置而不是常量,那么执行AND last应该更快:

unsigned char val;
int pos;
...
/* requires only a shift and AND */
int x = (val >> pos) & 1;
/* requires two shifts and AND */
int y = (val & (1 << pos)) >> pos;