Featured image of post 位运算

位运算

结论 1:一个数对 2 的非负整数次幂取模,等价于取二进制下一个数的后若干位这个结论是正确的。下面给出证明:

首先,我们证明取模 $2^n$ 等价于取二进制下一个数的后 $n$ 位:

任意一个非负整数 $x$ 可以表示为 $x = a2^n + b$ 的形式,其中 $a$ 和 $b$ 都是非负整数,且 $b < 2^n$。因此,$x$ 对 $2^n$ 取模的结果就是 $x$ 减去 $a2^n$ 后剩余的部分,即 $x \mod 2^n = b$。又因为 $b$ 的二进制表示中的最高 $n$ 位都是 $0$,所以 $b$ 和 $2^n$ 的二进制表示在这些位上都是相同的。因此,$x$ 对 $2^n$ 取模等价于取 $x$ 的二进制表示的后 $n$ 位。

接下来,我们证明取一个数的模 $2^n$ 再减 $1$ 等价于取该数的二进制表示的后 $n$ 位并将其全部设为 $1$:

任意一个非负整数 $x$ 可以表示为 $x = a2^n + b$ 的形式,其中 $a$ 和 $b$ 都是非负整数,且 $b < 2^n$。因此,$x$ 对 $2^n$ 取模的结果就是 $x$ 减去 $a2^n$ 后剩余的部分,即 $x \mod 2^n = b$。因此,$x$ 对 $2^n$ 取模再减 $1$ 的结果就是 $b - 1$。又因为 $b$ 的二进制表示中的最高 $n$ 位都是 $0$,所以 $b$ 对应的二进制数的后 $n$ 位都是 $b$ 的二进制表示的后 $n$ 位。因此,$b - 1$ 对应的二进制数就是将 $b$ 的二进制表示的后 $n$ 位全部设为 $1$ 后得到的数。

最后,我们证明取模 $2^n$ 等价于和 $2^n - 1$ 进行与操作:

由于 $2^n - 1$ 的二进制表示中的所有位都是 $1$,因此,将一个数 $x$ 和 $2^n - 1$ 进行与操作就相当于将 $x$ 的二进制表示的后 $n$ 位全部设为 $0$,即去掉 $x$ 的二进制表示的后 $n$ 位。因此,$x$ 对 $2^n$ 取模等价于将 $x$ 和 $2^n - 1$ 进行与操作后得到的数,即取 $x$ 的二进制表示的后 $n$ 位并将其全部设为 $0$。而根据前面的证明,这也等价于取 $x$ 的模 $2^n$ 的结果再减 $1$ 后的二进制表示的后 $n$ 位全部设为 $0$。因此,取模 $2^n$ 等价于和 $2^n - 1$ 进行与操作。

Licensed under CC BY-NC-SA 4.0
最后更新于 2023/06/16 12:43:44
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计