有人可以解释一下这个明智的操作吗

Can someone explain this bit wise operation

我想了解这个用于设置 char 数组大小的按位运算中发生了什么,但我并不完全理解它。

unsigned long maxParams = 2;// or some other value, I just chose 2 arbitrarily

unsigned char m_uParamBitArray[(((maxParams) + ((8)-1)) & ~((8)-1))/8]; 

根据 maxParams 的值将此数组设置为多大?

maxParams不能被八整除时,公式第一部分四舍五入为下一个八的倍数;否则,它保持数字不变。公式的第二部分将结果除以八,它总是可以这样做而不会得到余数。

一般情况下,如果想四舍五入到N而不超过,可以在除法前加上N-1

(x + (N - 1)) / N

您可以安全地删除表达式的 & ~((8)-1) 部分:

(maxParams + (8-1))/8

这会计算适合 maxParams 位所需的 8 位字符数。

+7是四舍五入到下一个8的倍数。

0 -> 7 将舍入为 0 字符

1 -> 8 将舍入为 1 个字符

除以 8 之后。/8

按位and是在除以8之前丢弃最后三位。