Ruby 按位和作为模替换

Ruby 按位和作为模替换,ruby,Ruby,我想知道为什么以下表达式会产生相同的结果: # method 1 def produce(n) n % 16 end #method 2 def produce(n) n & 15 end 我知道方法1使用模运算,方法2使用“按位and”。但是我有点不明白为什么用15调用&与调用模16是一样的 我有一种预感,它只适用于模xxxis2^n。有什么想法吗?你认为这是因为模是2^n。让我们看看它是如何在二进制中分解的 第一个模为16的方法在二进制中如下所示: 10000 通过与按

我想知道为什么以下表达式会产生相同的结果:

# method 1
def produce(n)
  n % 16
end

#method 2
def produce(n)
  n & 15
end
我知道方法1使用模运算,方法2使用“按位and”。但是我有点不明白为什么用
15
调用
&
与调用模16是一样的


我有一种预感,它只适用于模x
x
x
is
2^n
。有什么想法吗?

你认为这是因为模是
2^n
。让我们看看它是如何在二进制中分解的

第一个模为16的方法在二进制中如下所示:

10000
通过与按位和15的比较:

01111
本质上,你们用模或余数所做的就是得到16次下潜时剩下的东西。因为它是2的幂,所以你基本上去掉了16以上的所有位,因为它们平均分配,剩下16以下的位

与按位,你也在做同样的事情。你把每一点都保持在16以下,给自己同样的结果

这将适用于任何数字
%2^n
&(2^n-1)

请查看。