|= 或等
代码如下
public static void main(String[] args) {
int a = 5; // 0000 0101
int b = 3; // 0000 0011
a |= b; // 0000 00111
}
具体规则为:两个二进制对应位为0时该位为0,否则为1。
&= 与等
代码如下
public static void main(String[] args) {
int a = 5; // 0000 0101
int b = 3; // 0000 0011
a &= b; // 0000 0001
}
具体规则为:两个二进制对应位都为1时,结果为1,否则结果为都0。
^= 异或等
代码如下
public static void main(String[] args) {
int a = 5; // 0000 0101
int b = 3; // 0000 0011
a ^= b; // 0000 0110
}
具体规则为:两个二进制对应位相同时,结果为0,否则结果为1。
& 按位与
代码如下
public static void main(String[] args) {
int a = 5&3; // 0000 0101 & 0000 0011 = 0000 0001 -->1
int b = 5&7; // 0000 0101 & 0000 0111 = 0000 0101 -->5
}
运算规则为:二个真才为真1&1=1 , 1&0=0 , 0&1=0 , 0&0=0
&&(逻辑与)
运算规则为:&&逻辑与也称为短路逻辑与,先运算&&左边的表达式,一旦为假,后续不管多少表达式,均不再计算,一个为真,再计算右边的表达式,两个为真才为真。
|(按位或)
代码如下
public static void main(String[] args) {
int a = 5|3; // 0000 0101 & 0000 0011 = 0000 0111 -->7
int b = 5|7; // 0000 0101 & 0000 0111 = 0000 0111 -->7
}
运算规则为:一个为真即为真,1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1
||(逻辑或)
运算规则为:一个为真即为真,后续不再计算,一个为假再计算右边的表达式。
^(异或运算符)
运算规则为:1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0
<<(左移运算符)
代码如下
public static void main(String[] args) {
int a = 5<<2; // 0000 0101 --> 0001 0100 -->20
}
运算规则为:5的二进制往左挪2位,右边补0
>>(右移运算符)
代码如下
public static void main(String[] args) {
int a = 5>>2; // 0000 0101 --> 0000 0001 -->1
}
运算规则为:5的二进制往右移2位,正数左边第一位补0,负数补1
~(取反运算符)
运算规则为:取反就是1为0,0为1
>>>(无符号右移运算符)
正数
运算规则为:无符号右移运算符和右移运算符的主要区别在于负数的计算,因为无符号右移是高位补0,移多少位补多少个0。
负数
运算规则为:因为负数在内存中是以补码形式存在的,所有首先根据负数的原码求出负数的补码(符号位不变,其余位按照原码取反加1),然后保证符号位不变,其余位向右移动到X位,在移动的过程中,高位补1.等移位完成以后,然后保持符号位不变,其余按位取反加1,得到移位后所对应数的原码