比特的位移数组到Int变量

时间:2018-02-06 21:28:19

标签: c arrays bitwise-operators

所以我不确定这是否是实现我最终目标的最简单方法,所以如果有人有更好的建议,请随意把它扔给我。我试过在这里和谷歌搜索,但我似乎无法弄清楚如何做到这一点。

我有一个int值数组:int bitVal[8]

在我的程序中,这些值中的每一个都是1位,在一个字节内。我需要创建一个遍历每个值的循环,并将值移位到int变量。

我试过这个简单的测试:

int t = 0;
int e = 1;
for(int i = 0; i < 3; i++) {
    t <<= e;
    printf("%d\n", t);
}

现在我知道如果我的变量的字节值为0000 0010且我var <<= 1;,则结果为0000 0100。有没有办法设置它所以移位位是1而不是0?

2 个答案:

答案 0 :(得分:2)

你可能正在思考它。您可以一次移位一位,无论它是0还是1.它只需要一个循环,如下所示:

result = 0;
for (i=0; i<8; i++)
{
    result = (result<<1) | bitVal[i];
}

答案 1 :(得分:1)

  

有没有办法设置它使移位位为1而不是0?

不,不是这样的。相反,您所做的是移动目标值以腾出空间,然后与要添加的值组合。例如,如果x是您的累积变量且y包含您确定的值为0或1,那么您可以这样做:

x = (x << 1) | y;