使用 & 進行高效率取余運算


Java的HashMap源碼中用到的(n-1)&hash這樣的運算,這是一種高效的求余數的方法

結論:假設被除數是x,對於除數是2n的取余操作x%2n,都可以寫成x&(2n-1),位運算效率高!

舉例:259%8=259&7=3

原理:因為對8的取余結果肯定小於8

​ 在二級制中,8=(1000)2,因此取余結果肯定小於等於7=(0111)2

​ 因此對於被除數的二進制來說,只需要保證后三位保留下來即可(后三位保留下來肯定小於8)

​ 此時保存下來的結果就是取余結果

​ 259 : 1 0 0 0 0 0 0 1 1
​ 7 : 0 0 0 0 0 0 1 1 1

​ 要保存后面的三個數,就需要使用到位運算:(&運算中1&1=1,1&0=0,0&0=0)

​ 此時位運算結果:0 0 0 0 0 0 0 1 1

​ 轉換為10進制就等於3!

注意:只有對於除數是2n,才可以使用此方法進行取余運算

公式: x%2n == x&(2n-1)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM