我有一个位数组(存储为布尔值),我想重构成一个整数。我想从右侧插入位,并将它们向左移动,以便我的数组中的每一位。
如何在LSB侧插入一个位并同时将其移位?
答案 0 :(得分:5)
你会做这样的事情:
bool yourarray[32];
int output = 0;
for(int i = 0; i < 32; i++)
{
// Shift the bits left by 1. The first time through the loop this
// will have no real effect since 0 << 1 == 0.
output <<= 1;
// If this particular bit is "on", activate the LSB using a bitwise-or
if(yourarray[i] == true)
output |= 1; // this turns on the LSB
// We could also do this for completeness, but it has no effect since
// the LSB is already 0:
else
output &= ~1; // this turns off the LSB
}
我在这里假设一个大小为32的int。
还需要考虑其他注意事项,例如endianness,但这应该会给你一个想法。还要注意签名问题,因为在这种情况下,最高(最左边)位会影响int是正还是负。
答案 1 :(得分:1)
这只是为了解释使用按位运算符时发生的情况。
假设我们有一个1字节(8位)值:val1 = 00000011.我们还有另一个1字节值:val2 = 00100001
如果我们将val1的位移到左边2,就像这样:
val1 = val1 << 2;
val1现在看起来像这样:00001100。
然后,如果我们OR(|)val2和val1这样:
val1 = val1 | val2
val1将如下所示:00101101。
我希望这有助于^ _ ^