让我们获取一个位屏蔽状态字节数组:

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/

10-12 20:38