按位运算符

按位运算符

今天看数组的时候,跟到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