从位数组重建值

时间:2011-04-28 04:08:13

标签: c++ bitwise-operators

我有一个位数组(存储为布尔值),我想重构成一个整数。我想从右侧插入位,并将它们向左移动,以便我的数组中的每一位。

如何在LSB侧插入一个位并同时将其移位?

2 个答案:

答案 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。

我希望这有助于^ _ ^