java學習--高效的除模取余運算(n-1)&hash


沒有測試過使用取余運算符和位運算符都做同一件事時的時間效率!

取余運算符%

如3除以2取余數

int a = 3
a = a%2;

結果為1

上面是傳統的方式進行求余運算。

需要先將10進制轉成2進制到內存中進行計算,然后再把結果轉換成10進制

 

而位運算是直接在內存中進行,不需要經過這些轉換

但是位運算只能用於除數是2的n次方的數的求余

也就是說,B%C,要滿足C=2n

比如:

14%4 等價於 14&(22-1)

結果都是等於2

計算過程
14    1110
3       11

1110 & 11=10 = 2

 

但是14%6  不等價於   14&6

計算過程
14        1110
6-1=5      101

1110 & 101=100 = 4

這個6不是2n次方的倍數,所以算出來的結果都不會相等。

 

在哪個地方可以用到?

這個可以用於特定的hash求余算法中,比如HashMap中查找key的hash值對應的位置。可以提高查找位置的速度

用於已知的數據運算,20483%64,這種已知除數是2的n次方的程序中,HashMap中就是使用這種方式


免責聲明!

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



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