按位运算符
今天看数组的时候,跟到rand.nextInt(int i)这个方法中,其源码是这样解释这个方法
public int nextInt(int bound) {
if (bound <= 0)
throw new IllegalArgumentException(BadBound);
int r = next(31);
int m = bound - 1;
if ((bound & m) == 0) // i.e., bound is a power of 2
r = (int)((bound * (long)r) >> 31);
else {
for (int u = r;
u - (r = u % bound) + m < 0;
u = next(31))
;
}
return r;
}
这里if里面有个按位运算符的判断(bound & m) == 0,看到在这里就记录下按位运算符的操作(其实是之前的都忘了,所以赶紧记录?):
按位运算符有&,|,>>,<<等
&:按位进行与运算,当两个操作数同时为1时则为1.eg:1001&0001=0001=1;
|:按位进行或运算,当两个操作数任意一个为1就为1(仅当两个数同时为0时才为0).eg:1001&0001=1001
I>>T:把i的全部位数向右移动t位.eg:0010>>1 = 0001
I<<T:把i的全部位数向左移动t位.eg:0010<<1 = 0100