假设X和Y是两个正整数,Y是2的幂。那么这个表达式计算什么呢?
(X+Y-1) & ~(Y-1)
我发现这个表达式出现在内存池的某些c/c++实现中(X代表以字节为单位的对象大小,Y代表以字节为单位的对齐方式,该表达式返回适合在内存池中使用的 block 大小(以字节为单位)。
最佳答案
&~(Y-1)
哪里Y
是 2 的幂,将最后 n 位清零,其中 Y
= 2n:Y-1
产生 n 个 1 位,通过 ~ 反转它会得到一个末尾带有 n 个零的掩码,并通过位级 &
进行反转将掩码为零的位清零。
实际上产生的数字是 Y
的某个倍数2 的幂。
最大可以起到减去Y-1
的效果从数字中,所以首先添加,给出 (X+Y-1) & ~(Y-1)
。该数字不小于 X
,并且是 Y
的倍数.
关于c++ - 这个表达式计算什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33380303/