Java 如何证明m%n等于m&;(n-1)当n为2^k时?
请注意,“%”是余数运算符,“&”是位and运算符,k是大于0的整数 例如:Java 如何证明m%n等于m&;(n-1)当n为2^k时?,java,dictionary,hash,hashmap,thread-local,Java,Dictionary,Hash,Hashmap,Thread Local,请注意,“%”是余数运算符,“&”是位and运算符,k是大于0的整数 例如: 33%16=1 equivalent to 33&(16-1)=1 我在JDK1.8threadlocalmap中找到了这个等价物。我知道它是正确的,但不知道如何证明它是正确的。如果您能提供帮助,我将不胜感激。m%n是m除以n的余数,因此是一个介于0和n-1之间,或者介于0和2^k-1之间的数字 二进制中的2^k是一个后跟k个零。2^k-1是k个连续的 m&n是m&(2^k-1)是一个数字,在二进制中,1位必
33%16=1 equivalent to 33&(16-1)=1
我在JDK1.8threadlocalmap中找到了这个等价物。我知道它是正确的,但不知道如何证明它是正确的。如果您能提供帮助,我将不胜感激。
m%n
是m除以n的余数,因此是一个介于0和n-1之间,或者介于0和2^k-1之间的数字
二进制中的2^k是一个后跟k个零。2^k-1是k个连续的
m&n
是m&(2^k-1)是一个数字,在二进制中,1位必须出现在最右边的k位中。因此,它在0到2^k-1的范围内
QED。数学证明?是的,或者与编程相关的证明也能有所帮助。这是一个公认的数学恒等式。你不需要证明,就像你需要1+1=2的证明一样。@user207421 Cmon,它不是那么简单这是更加公理化的
2^k
总是1
后面跟着k
0,所以n-1
只是k
1的一个掩码。所以m&(n-1)
给出了m
的低位k
位,就像m%n
一样。