一、判斷奇偶數(shù)
//偶數(shù)
a & 1 = 0
//奇數(shù)
a & 1 = 1
我們可以利用 & 運(yùn)算符的特性,來判斷二進(jìn)制數(shù)第一位是0還是1。
用if ((a & 1) == 0) 代替 if (a % 2 == 0)來判斷a是不是偶數(shù)。
二、交換兩個數(shù)
- 臨時變量法:
int temp = a;
a = b;
b = temp;
- 使用 ^ 位運(yùn)算符:
a ^= b;
b ^= a;
a ^= b;
需要了解一下 ^ 的幾個特性:
a ^ a = 0
a ^ 0 = a
(a ^ b) ^ c = a ^ (b ^ c)
從數(shù)學(xué)角度來分析:
第一步:a = a ^ b
第二步:b = a ^ b = (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a
第三步:a = a ^ b = (a ^ b) ^ b = (a ^ a) ^ b = b ^ 0 = b
三、取余
其實(shí)取余算法和上面的判斷奇偶數(shù)原理是一樣的。
比如說我們要讓a對16進(jìn)行取余,那么就可以讓 a & 15 得出來的結(jié)果就是余數(shù)。
可以看出15的二進(jìn)制表示為:
0000 0000 0000 0000 0000 0000 0000 1111
所以 a & 15 返回值就是a二進(jìn)制的最低四位,也就是
a & 15 = a % 16
使用 & 來進(jìn)行取余的算法比使用 % 效率高很多,雖然只能對2^n的數(shù)值進(jìn)行取余計(jì)算,但是在JDK源碼中也是經(jīng)常被使用到,比如說HashMap中判斷key在Hash桶中的位置。