我目前正在处理按位运算,我找到了一种方法,其中引用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时,则完全不同.除数用于使四个或操作在单个字节上工作.并且模数用于指向数字数组中的仅四个值.