C中的按位运算,指的是8位数组中的位置

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

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

void method(int pos, uint8_t* array_of_num) {

  int dim = 5;
  uint8_t numbers[4] = {1, 8, 32, 64}; 

  int size = 10;
  int i = 0;
  for (i=0; i < size; i++){

     array_of_num[pos + i/4] |= numbers[i%4];   // <======
  }

}  

我不明白,“array_of_num [pos i / 4]”指的是哪个位置. array_of_num是一个8位uint的数组,所以它看起来像这样:

[0] ----> 1 (00000001); 
[1] ----> 5 (00000101); 
[2] ----> ......  

它是指数组中某个位置的int的某些位,但如果是,则| – – 操作数如何仅考虑这些位,因为数字[]也是8位uint.让我试着解释这个例子的意思,所以这个:

pos = 0; i = 1
array_of_num[0 + 1/4] |= 00001000 

如果我们写下来,那就不一样了:

array_of_num[0] |= 00001000

最佳答案 代码正在做什么,它是根据给定的输入(size,pos)在array_of_num数组中设置位.

使用当前值,它从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);

当然我= 0; array_of_num [0 i / 4]与array_of_num [0]相同,但是当i = 6时,则完全不同.除数用于使四个或操作在单个字节上工作.并且模数用于指向数字数组中的仅四个值.

点赞