0

我有一个数字,我在其上执行特定操作,我想确保该数字在操作后仍可整除。

假设我有一个整数 x 可以被 PAGE_S 整除

这会产生一个整数,它也可以被 PAGE_S 整除?

x^ ~(PAGE_S-1);

所以(x % PAGE_S) == ( (x^ ~(PAGE_S-1)) % PAGE_S)?据我测试,它有效,但我需要了解为什么......

ps 这是将虚拟内存地址转换为物理地址的代码的一部分

4

1 回答 1

2

是的,但前提PAGE_S是 是 2 的幂。

如果PAGE_S是 2 的幂(例如 2 k),则其二进制表示是 1 后跟 k 0。因此,PAGE_S-1将是二进制的 k 1,~(PAGE_S-1)所有 1 后跟 k 0 也是如此。

xor 操作 (^) 将翻转第一个操作数中第二个操作数中对应位为 1 的任何位;例如,101101 ^ 111000 是 010101,因为前三位被翻转。

由于x可被 整除PAGE_S,因此最后 k 位必须为零。由于 的最后 k 位~(PAGE_S-1)也为零,因此 的最后 k 位x^~(PAGE_S-1)为零,因此可以被 整除PAGE_S。这也会反转 的所有其他位x

于 2012-08-24T04:57:32.370 回答