【发布时间】:2012-09-26 16:58:17
【问题描述】:
让我们获取一个位掩码状态字节数组:
char status[10];
现在,假设我们要从每个状态字节中取出第 3 位并将它们放入一个 int 中,其中 int 的 LSB 是 status[0] bit 3,下一个是 status[1] bit 3,以此类推.
int foobits = 0;
for( i = 0; i < 10; i++ )
{
foobits |= (( status[i] & 0x04 ) >> 2) << i;
}
我的问题是:是否有另一种方法来完成这项工作,只需要一个班次?
编辑:我正在尝试使用 foobits 来包含 status[i] bit #3s 的位数组。
【问题讨论】:
-
你为什么要担心换班?无论如何,在大多数 CPU 上,它都是一条 CPU 指令。
-
它可以在数据只移动一次的情况下完成,但它的代码更多,速度也更慢。这段代码和它将会得到的一样好。
-
感谢您的意见。我只是好奇是否有更好的方法,因为我会做很多这样的事情......
-
这个问题可能更适合code review stackexchange
-
@MooingDuck 不正确......看我的回答。这是一个从循环中分解常数的情况。
标签: c bit-manipulation