我想知道为什么以下表达式会产生相同的结果:
# method 1
def produce(n)
n % 16
end
#method 2
def produce(n)
n & 15
end
我知道方法1使用模运算,方法2使用'按位AND'。但我有点迷失为什么用&
调用15
与调用模16进行调用相同。
我预感到它仅适用于modulo x
x
2^n
的{{1}}。有什么想法吗?
答案 0 :(得分:3)
你认为这与模2^n
有关是正确的。让我们来看看二进制文件是如何分解的。
使用模16的第一种方法在二进制文件中看起来像这样:
10000
通过与按位和15:
的共同比较01111
本质上你用模数或余数做的是得到潜水时剩下的16点。因为它是2的幂,你实际上是去除16以上的所有位,因为它们均匀分配并留下任何比特低于16。
使用bitwise,你也在做同样的事情。你将每一点都保持在16以下并给自己相同的结果。
这适用于任何数字% 2^n
和& (2^n - 1)