一、<< :左移运算符,num << 1,相当于num乘以2
例如:
2 << 1 //4 移了一位2*2
2 << 2 //8 移了两位 2*2*2
2 << 3 //16 移了三位 2*2*2*2
二、>> :右移运算符,num >> 1,相当于num除以2
例如:
16 >> 1 //8 移了一位 16/2
16 >> 2 //4 移了两位 16/2/2
16 >> 3 //2 移了三位 16/2/2/2
三、>>> :无符号右移,忽略符号位,高位都以0补齐,无符号右移运算符>>> 只是对32位和64位的值有意义
例如:
1 >>> 1 //0001 → 0000 等于0
2 >>> 1 //0010 → 0001 等于1
3 >>> 1 //0011 → 0001 等于1
4 >>> 1 //0100 → 0010 等于2
4 >>> 2 //0100 → 0001 等于1
四、& :与运算,符号两边都为true,结果才是true,否则为false;对于数字,可将数字转换为2进制形式去理解,采用同位 与 操作即可得出结果。
例如:
true&true=true
true&false=false
false&false=false
2&3=2 即:0010&0011=0010 (从高位到低位,依次做与操作)
五、| :或运算,符号两边只要有一个为true,则结果为true,否则为false;对于数字,可将数字转换为2进制形式去理解,采用同位 或 操作即可得出结果。
例如:
true|true=true
true|false=true
false|true=true
false|false=false
2|3=3 即:0010|0011=0011 (从高位到低位,依次做或操作)
六、^ :异或运算,相同为0,不同为1;对于数字,可将数字转换为2进制形式去理解,采用同位 异或 操作即可得出结果。
例如:
2^3=1,即0010^0011=0001
true^true=false
false^false=false
true^false=true
5^2=7 即:0101^0010=0111 (从高位到低位,依次做异或操作)
七、! :非运算
例如:
!true=false
!false=true
八、布尔类型操作符:&=、|=、^=
咋一看不知道啥意思,如果你再看看 += 是不是就明白了呢。
int num = 1;
num = num + 2 等同于 num += 2
同理:
boolean flag = true;
flag = flag & false 等同于 flag &= false
flag = flag | false 等同于 flag |= false
flag = flag ^ false 等同于 flag ^= false
注意:!= 不适用于该情况。
九、& 和 &&、| 和 || 各自的区别。
&& 和 || 两个符号存在运算短路的特性,即
&&符号左边的表达式结果为false,则不会进行符号右边的运算;
||符号左边的表达式结果为true,则不会进行右边的运算。
而& 和 | 两个符号都会运算完两边的表达式,才能得出结果。
例如:
(1+1==2) & (1+2==3) 两边都运算得出结果:true
(1+1==3) && (1+2==3) 发生短路,不运算右边直接返回结果:false
(1+1==2) | (1+2==3) 两边都运算得出结果:true
(1+1=2) || (1+2==4) 发生短路,不运算右边直接返回结果:true
欢迎访问我的个人主页:学而时习之