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
xxis2^n
。有什么想法吗?你认为这是因为模是2^n
。让我们看看它是如何在二进制中分解的
第一个模为16的方法在二进制中如下所示:
10000
通过与按位和15的比较:
01111
本质上,你们用模或余数所做的就是得到16次下潜时剩下的东西。因为它是2的幂,所以你基本上去掉了16以上的所有位,因为它们平均分配,剩下16以下的位
与按位,你也在做同样的事情。你把每一点都保持在16以下,给自己同样的结果
这将适用于任何数字%2^n
和&(2^n-1)
请查看。