多位移位更优雅的解决方案

时间:2012-09-26 16:58:17

标签: c bit-manipulation

让我们取一个位掩码状态字节数组:

char status[10];

现在,假设我们想从每个状态字节中拉出第3位并将它们放入int,其中int的LSB是状态[0]第3位,接下来是状态[1]第3位,等等

int foobits = 0;
for( i = 0; i < 10; i++ )
{
    foobits |= (( status[i] & 0x04 ) >> 2) << i;
}

我的问题是:是否有另一种方法可以实现这一点,只涉及一个班次?

编辑:我正在尝试使用foobits来包含状态[i]位#3s的位数组。

1 个答案:

答案 0 :(得分:3)

你可以这样做

int foobits = 0;
for( i = 0; i < 10; i++ )
{
    foobits |= (status[i] & 0x04) << i;
}
foobits >>= 2;

但为什么要这么麻烦?

“过早优化是所有邪恶的根源。” - 唐纳德克努特

相关问题