将位数组移位到 Int 变量中
Bit-Shift array of Bits into Int Variable
所以我不确定这是否是实现我最终目标的最简单方法,所以如果有人有更好的建议,请随时向我提出。我已经尝试在此处和使用 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 <<= 1;
,结果将是 0000 0100
。有没有办法设置它,使移位的位为 1 而不是 0?
你可能想多了。您可以一次移入一位,无论它是 0 还是 1。它所需要的只是一个循环,例如:
result = 0;
for (i=0; i<8; i++)
{
result = (result<<1) | bitVal[i];
}
Is there a way to set it so the shifted bit is a 1 instead of a 0?
不,不是这样。相反,您所做的是移动目标值以腾出空间,然后与您要添加的值相结合。例如,如果 x
是您的累积变量并且 y
包含一个您确定为 0 或 1 的值,那么您可以这样做:
x = (x << 1) | y;
所以我不确定这是否是实现我最终目标的最简单方法,所以如果有人有更好的建议,请随时向我提出。我已经尝试在此处和使用 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 <<= 1;
,结果将是 0000 0100
。有没有办法设置它,使移位的位为 1 而不是 0?
你可能想多了。您可以一次移入一位,无论它是 0 还是 1。它所需要的只是一个循环,例如:
result = 0;
for (i=0; i<8; i++)
{
result = (result<<1) | bitVal[i];
}
Is there a way to set it so the shifted bit is a 1 instead of a 0?
不,不是这样。相反,您所做的是移动目标值以腾出空间,然后与您要添加的值相结合。例如,如果 x
是您的累积变量并且 y
包含一个您确定为 0 或 1 的值,那么您可以这样做:
x = (x << 1) | y;