gpt4 book ai didi

c - 需要知道一个数经过运算后是否可被整除

转载 作者:行者123 更新时间:2023-11-30 14:24:14 25 4
gpt4 key购买 nike

我有一个号码要对其执行特定操作我想确保该数字在操作后仍然可以整除。

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

这会产生一个也能被 PAGE_S 整除的整数吗?

x^ ~(PAGE_S-1);

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

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

最佳答案

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

如果 PAGE_S 是 2 的幂(例如 2k),则其二进制表示形式是 1 后跟 k 个 0。因此,PAGE_S-1 在二进制中将是 k 个 1,因此 ~(PAGE_S-1) 是全 1 后跟 k 个 0。

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

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

关于c - 需要知道一个数经过运算后是否可被整除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12103249/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com