让我们获取一个位屏蔽状态字节数组:
char status[10];
现在,假设我们想从每个状态字节中取出第3位,并将它们放入一个int中,其中int的LSB是status[0]位3,接下来是status[1]位3,等等。
int foobits = 0;
for( i = 0; i < 10; i++ )
{
foobits |= (( status[i] & 0x04 ) >> 2) << i;
}
我的问题是:有没有一种只涉及一个转变的替代方法来实现这一点?
编辑:我试图使用foobits来包含status[I]bit#3s的位数组。
最佳答案
你可以这么做
int foobits = 0;
for( i = 0; i < 10; i++ )
{
foobits |= (status[i] & 0x04) << i;
}
foobits >>= 2;
但为什么要麻烦呢?
“过早的优化是万恶之源。”——唐纳德·克努特
关于c - 更优雅的解决方案,可多次移位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12606743/