1. 程式人生 > >java學習--高效的除模取餘運算(n-1)&hash

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中就是使用這種方式