1.逻辑或( || 当条件有一个为true时,则条件为true)
int a = 10;
int b = 11;
System.out.println(a > 10 || b > 10);//true
2.逻辑与( && 当条件有一个为false时,则条件为false)
int a = 10;
int b = 11;
System.out.println(a > 10 && b > 10);//false
3.按位或( | 进制计算true或false)
比较前,先转换成二进制,然后比较二进制的0和1,0 == false,1 == true。 有1则1
int a = 10;
int b = 11;
/*
* 先把10和11转换成二进制,结果如下:
* 0 = false , 1 = true
* 10 = 1010;
* 11 = 1011;
* ------------
* 1011 = 11;
* */
System.out.println(a|b);//11
4.按位与( & 进制计算true或false)
比较前,先转换成二进制,然后比较二进制的0和1,0 == false,1 == true。 有0则0
int a = 10;
int b = 11;
/*
* 先把10和11转换成二进制,结果如下:
* 0 = false , 1 = true
* 10 = 1010;
* 11 = 1011;
* ------------
* 1010 = 10;
* */
System.out.println(a&b);//10
5.按位异或( ^ 相同为false,不同为true)
比较前,先转换成二进制,然后比较二进制的0和1,0 == false,1 == true。 相同为0,不同为1
int a = 10;
int b = 11;
/*
* 先把10和11转换成二进制,结果如下:
* 0 = false , 1 = true
* 10 = 1010;
* 11 = 1011;
* ------------
* 0001 = 1;
* */
System.out.println(a^b);//1
6.按位非( ! 条件为true,结果为false。条件为false,结果为true)
boolean boo = true;
System.out.println(!boo);//false
boolean boo = false;
System.out.println(!boo);//true
7.~按位取反
int a = 10;
/*
* 10转换为32位二进制
* 源码:
* 00000000 00000000 00000000 00001010
* 按位取反:
* 11111111 11111111 11111111 11110101
* 补码:
* 11111111 11111111 11111111 11110101
* 反码:
* 11111111 11111111 11111111 11110100
* 源码(负数符号不变,其他取反):
* 10000000 00000000 00000000 00001011 = -11
*
* */
System.out.println(~a);//-11
计算(-2)+(-3)
补码 = 反码 + 1
-2转成二进制
源码:
10000000 00000000 00000000 00000010
反码(负数符号位不变):
11111111 11111111 11111111 11111101
补码:
11111111 11111111 11111111 11111110
-3转成二进制
10000000 00000000 00000000 00000011
反码(负数符号位不变):
11111111 11111111 11111111 11111100
补码:
11111111 11111111 11111111 11111101
两者和的补码:
11111111 11111111 11111111 11111110
+
11111111 11111111 11111111 11111101
=
11111111 11111111 11111111 11111011
两者和的反码:
11111111 11111111 11111111 11111010
取反(负数符号位不变):
10000000 00000000 00000000 00000101
转换成十进制为:
-5
8.<<(向左移)
向左移<<(注意:左边最高位丢弃,右边补齐0)
int a = 5;
/*
* 把5转换成二进制:
* 00000101
* 向左移2位
* 000101
* 向右加两位
* 00010100
* 转换十进制:
* 20
* */
System.out.println(a<<2);//20
快速计算方法:向左移动几位,就是乘以2的几次幂
int a = 6;
int b = 7;
int c = 8;
int d = 9;
int e = 10;
System.out.println(a<<2);//6*2^2 = 24
System.out.println(b<<2);//7*2^2 = 28
System.out.println(c<<2);//8*2^2 = 32
System.out.println(d<<2);//9*2^2 = 36
System.out.println(e<<2);//10*2^2 = 40
9. >>(向右移)
向右移>> (最高位是0,左边补齐0;最高为是1,左边补齐1)
int a = 22;
/*
* 把5转换成二进制:
* 00010110
* 向右移2位
* 000101
* 向左加两位
* 00000101
* 转换十进制:
* 5
* */
System.out.println(a>>2);//5
快速计算方法:向右移动几位,就是除以2的几次幂
int a = 24;
int b = 28;
int c = 32;
int d = 36;
int e = 40;
System.out.println(a>>2);// 24/2^2 = 6
System.out.println(b>>2);// 28/2^2 = 7
System.out.println(c>>2);// 32/2^2 = 8
System.out.println(d>>2);// 36/2^2 = 9
System.out.println(e>>2);// 40/2^2 = 10