Java运算符&,&&,|,||,^,<<,>>,~,>>>
1. &(按位与[位运算])
/***
* 结果:2
*/
@Test
public void test1() {
int a=6;
int b=3;
System.out.println(a&b);
}
&按位与的运算规则是将两边的数转换为二进制位,然后运算最终值,运算规则即(两个为真才为真)1&1=1 , 1&0=0 , 0&1=0 , 0&0=0
6的二进制00000110,3的二进制是00000011那么由按位与运算规则得知6&3=00000110&00000011=00000010即为十进制的2
2. &&(逻辑与)
/***
* 结果:false
*/
@Test
public void test2() {
System.out.println(1==1&&1==2);
}
&&逻辑与也称为短路逻辑与,先运算&&左边的表达式,一旦为假,后续不管多少表达式,均不再计算,一个为真,再计算右边的表达式,两个为真才为真。
3. |(按位或[位运算])
/***
* 结果:7
*/
@Test
public void test3() {
int a=6;
int b=3;
System.out.println(a|b);
}
|按位或和&按位与计算方式都是转换二进制再计算,不同的是运算规则(一个为真即为真)1|0 = 1 , 1|1 = 1 , 0|0 = 0 , 0|1 = 1
6的二进制00000110,3的二进制是00000011那么由按位与运算规则得知6|3=00000110|00000011=00000111即为十进制7
4. ||(逻辑或)
/***
* 结果:true
*/
@Test
public void test4() {
System.out.println(1==1||1==2);
}
逻辑或||的运算规则是一个为真即为真,后续不再计算,一个为假再计算右边的表达式。
5. ^(异或运算符[位运算])
/***
* 结果:5
*/
@Test
public void test5() {
int a=6;
int b=3;
System.out.println(a^b);
}
^异或运算符顾名思义,异就是不同,其运算规则为1^0 = 1 , 1^1 = 0 , 0^1 = 1 , 0^0 = 0
6的二进制00000110,3的二进制是00000011那么由按位与运算规则得知6^3=00000110^00000011=00000101即为十进制5
6. <<(左移运算符[位运算])
/***
* 结果:24
*/
@Test
public void test6() {
int a=6;
System.out.println(a<<2);
}
6<<2的意思为6的二进制位往左挪两位,右边补0,6的二进制位是0000 0110 , 就是把有效值110往左挪两位就是0001 1000 即为10进制24,正数左边第一位补0,负数补1,等于乘于2的n次方。
7.>>(右移运算符[位运算])
/***
* 结果:1
*/
@Test
public void test7() {
int a=6;
System.out.println(a>>2);
}
6>>2的意思为6的二进制位往右挪两位, 6的二进制位是0000 0110 , 就是把有效值110往右挪两位就是00000001 即为10进制1,正数左边第一位补0,负数补1,等于除于2的n次方
8.~(取反运算符[位运算])
/***
* 结果:-7
*/
@Test
public void test8() {
int a=6;
System.out.println(~a);
}
取反就是1为0,0为1。
~6就是把二进制的各位取反,0变成1,1变成0。6的二进制数为00000000 00000000 00000000 0000 0110,按位取反以后是11111111 11111111 11111111 11111001,11111111 11111111 11111111 11111001在计算机中是用补码表示的,其成真值为10000000 00000000 00000000 00000111。十进制为-7。
已知补码求真值:
http://www.jiajiajia.club/blog/artical/1769.>>>(无符号右移运算符[位运算])
/***
* 结果:1073741822
*/
@Test
public void test9() {
int a=-6;
System.out.println(a>>>2);
}
-6的二进制在计算机中的表示为11111111 11111111 11111111 11111010。无符号右移两位变为00111111 11111111 11111111 11111110。右移以后在计算机中表示的数变成了正数,所以真值也为00111111 11111111 11111111 11111110十进制就是1073741822