让我们取一个位掩码状态字节数组:
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的位数组。
答案 0 :(得分:3)
你可以这样做
int foobits = 0;
for( i = 0; i < 10; i++ )
{
foobits |= (status[i] & 0x04) << i;
}
foobits >>= 2;
但为什么要这么麻烦?
“过早优化是所有邪恶的根源。” - 唐纳德克努特