Java 逻辑运算符
逻辑与( && ) | a&&b,a和b都为真则为真 |
---|---|
逻辑或( || ) | a||b,a和b都为假则为假 |
按位与( & ) | 对boolean类型数据 与运算 和 对二进制数相应位置 与运算 |
按位或( | ) | 对boolean类型数据 或运算 和 对二进制数相应位置 或运算 |
取反( ! ) | 对boolean类型的数据取反 |
按位取反( ~ ) | 对数的二进制数每个位置取反 |
逻辑异或(^) | a^b,a和b不同,则为真。可以对二进制数或boolean类型的数据进行异或 |
逻辑与 &&
a&&b,a和b都为真则为真
boolean a=true;
boolean b=true;
System.out.print(a && b);
逻辑或 ||
boolean a=false;
boolean b=false;
System.out.print(a && b);
按位与 &
计算 a&b
-
a和b都是数,即 按照a和b的二进制数,比较每个位置的数,都为1,则为1,有一个为0则为0(都为真,则真)
比如,0 1 0 0 1 0 1 0
1 0 1 1 0 1 1 1
结果:0 0 0 0 0 0 1 0
-
a和b,都是都是boolean类型,在逻辑运算上和 逻辑与( &&) 是一样的
但按位与(&)和逻辑与(&&)的区别在于 :
按位与(&)逻辑运算时,第一个条件为false的时候,第二个条件任然会执行 ,而逻辑与(&&) 第一个条件为false,第二个条件不会执行
int a=0; int b=0; if(a!=0 & ++b<1){ System.out.println("啦啦啦"); } System.out.println("a="+a+"\tb="+b);
int a=0; int b=0; if(a!=0 && ++b<1){ System.out.println("啦啦啦"); } System.out.println("a="+a+"\tb="+b);
按位或 |
按位或的计算和按位与时差不多的
计算 a | b
-
a和b都是数,即 按照a和b的二进制数,比较每个位置的数,都为0,则为0,有一个为1则为1(都为假,才假)
比如,0 0 0 0 1 0 1 0
1 0 1 1 0 1 1 1
结果:1 0 1 1 1 1 1 1
-
a和b,都是都是boolean类型,在逻辑运算上和 逻辑或( || ) 是一样的
但按位或( | )和逻辑或( || )的区别在于 :
按位或( | )逻辑运算时,第一个条件为true的时候,第二个条件任然会执行 ,
而逻辑或( || ) 第一个条件为true,第二个条件不会执行
int a=0; int b=0; if(a==0 | ++b<1){ System.out.println("啦啦啦"); } System.out.println("a="+a+"\tb="+b);
int a=0; int b=0; if(a==0 || ++b<1){ System.out.println("啦啦啦"); } System.out.println("a="+a+"\tb="+b);
取反 !
! :对boolean类型的数据取反
注意: ! 只能对boolean类型的数据取反,不能对数取反
如,
boolean flag = true;
System.out.println(!flag);
boolean flag = 1<5;
System.out.println(!flag);
按位取反 ~
~:对数的二进制数的每个位置进行取反
-
先来说明一下:在计算机中存储的信息均是已二进制形式保存的。且数字是以补码形式保存的,正数的补码和原码同,负数的补码为原码取反后加1
-
对 1 按位取反
1的二进制数: 0000 0001
按位取反 1111 1110
计算后得到 ~1 = -2
System.out.println(~1);
逻辑异或
逻辑异或又称为异或
注意: ~ 只能对数按位取反,不能对boolean类型的数据取反
计算 a^b
- 当a和b都为boolean类型数据,a和b不同则为真,其他都为假
System.out.println(false ^ true);
-
当a和b为数,对其二进制数的每个位置进行异或运算:不同为1,相同为0
如, 0101 0011
1100 1100
结果: 1001 1111
-
计算 0 ^ 1
System.out.println(0 ^ 1);
0000 0000
0000 0001
0000 0001
位置进行异或运算:不同为1,相同为0**
如, 0101 0011
1100 1100
结果: 1001 1111
-
计算 0 ^ 1
System.out.println(0 ^ 1);
0000 0000
0000 0001
0000 0001
所以结果为 1