沒有測試過使用取余運算符和位運算符都做同一件事時的時間效率!
取余運算符%
如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中就是使用這種方式