C中的位运算,指8位数组中的一个位置

C中的位运算,指8位数组中的一个位置,c,bitwise-operators,C,Bitwise Operators,我目前正在处理逐位运算,并找到了一种方法,其中对8位数组中某个位置的引用对我来说并不清楚 下面是一个例子,我随机选择了所有的数字只是为了解释,方法本身要复杂得多(数组可以用任何足够大的大小初始化): 是指数组中某个位置的int的一些位,但是如果是的话,{ -操作数怎么能只考虑那些位,因为数字[]也是8位Uint。让我试着解释一下这个例子的意思,因此: pos = 0; i = 1 array_of_num[0 + 1/4] |= 00001000 如果我们只是写下: array_of_num

我目前正在处理逐位运算,并找到了一种方法,其中对8位数组中某个位置的引用对我来说并不清楚

下面是一个例子,我随机选择了所有的数字只是为了解释,方法本身要复杂得多(数组可以用任何足够大的大小初始化):

是指数组中某个位置的int的一些位,但是如果是的话,{ -操作数怎么能只考虑那些位,因为数字[]也是8位Uint。让我试着解释一下这个例子的意思,因此:

pos = 0; i = 1
array_of_num[0 + 1/4] |= 00001000 
如果我们只是写下:

array_of_num[0] |= 00001000

代码所做的是根据给定的输入(
size
pos
)在数组的
array\u中设置位

对于当前值,它从
pos
的8位值开始,设置位0、3、5和6,然后移动到下一个值并执行相同操作,对于第三个值,它设置位0和3

写出来的是:

array_of_num[pos] | = 1;
array_of_num[pos] | = 8;
array_of_num[pos] | = 32;
array_of_num[pos] | = 64;
array_of_num[pos+1] | = 1;
array_of_num[pos+1] | = 8;
array_of_num[pos+1] | = 32;
array_of_num[pos+1] | = 64;
array_of_num[pos+2] | = 1;
array_of_num[pos+2] | = 8;
所以本质上它是这样做的:

array_of_num[pos] |= (1|8|32|64);
array_of_num[pos+1] |= (1|8|32|64);
array_of_num[pos+2] |= (1|8);

当然
i=0;_num[0+i/4]
的数组_与_num[0]
的数组_相同,但当
i=6
时,则完全不同。除数用于使四个或运算在一个字节上工作。模用于指向
数字
数组中的四个值。

它是
0+i/4
而不是
0+1/4
如果
i
大于3,则i%4`与0不同。好吧,如果我正确理解这样写的话,计数器
pos
将每4步增加一个,我也可以用一个额外的计数器替换它,基本上写入
数组\u of_num[pos]
,对吗?非常感谢您的解释!是的,位置每4个周期增加一次,因此也可以使用单独的计数器来完成。
array_of_num[pos] | = 1;
array_of_num[pos] | = 8;
array_of_num[pos] | = 32;
array_of_num[pos] | = 64;
array_of_num[pos+1] | = 1;
array_of_num[pos+1] | = 8;
array_of_num[pos+1] | = 32;
array_of_num[pos+1] | = 64;
array_of_num[pos+2] | = 1;
array_of_num[pos+2] | = 8;
array_of_num[pos] |= (1|8|32|64);
array_of_num[pos+1] |= (1|8|32|64);
array_of_num[pos+2] |= (1|8);