【问题标题】:Bit-Shift array of Bits into Int Variable将位的位移数组转换为 Int 变量
【发布时间】:2018-02-06 21:28:18
【问题描述】:

所以我不确定这是否是实现我最终目标的最简单方法,所以如果有人有更好的建议,请随时向我提出。我已经尝试在此处和 Google 上进行搜索,但我似乎无法弄清楚如何做到这一点。

我有一个 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 &lt;&lt;= 1;,结果将是0000 0100。有没有办法设置它,使移位的位是 1 而不是 0?

【问题讨论】:

  • 因为t0 移动它仍然是0。问题不是很清楚。 int bitVal[8]不在代码sn-p中,循环约束就是好奇的i &lt; 3;

标签: c arrays bitwise-operators


【解决方案1】:

你可能想多了。无论是 0 还是 1,您都可以一次移入一位。它所需要的只是一个循环,如下所示:

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

【讨论】:

  • 谢谢。你说得对,我完全想多了T_T
【解决方案2】:

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

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

x = (x << 1) | y;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2014-07-25
    相关资源
    最近更新 更多