逻辑运算符
&,|, &&,||,!,^
逻辑运算符:进行逻辑运算的,运算符左右连接的都是 布尔类型的操作数,最终表达式的结果是布尔值:要么是true,要么false
代码:
- public class TestOpe09{
- public static void main(String[] args){
- // 逻辑与 :& 规律:只要有一个操作数是false,那么结果一定是false
- System.out.println(true&true);
- System.out.println(true&false);
- System.out.println(false&false);
- System.out.println(false&true);
- // 短路与:&& 规律:效率高一些,只要第一个表达式是false,那么第二个表达式就不用计算了,结果一定是false
- System.out.println(true&&true);
- System.out.println(true&&false);
- System.out.println(false&&false);
- System.out.println(false&&true);
- // 逻辑或:| 规律:只要有一个操作数是true,那么结果一定是true
- System.out.println(true|true);
- System.out.println(true|false);
- System.out.println(false|false);
- System.out.println(false|true);
- // 短路或:|| 规律:效率高一些,只要第一个表达式是true,那么第二个表达式就不用计算了,结果一定是true
- System.out.println(true||true);
- System.out.println(true||false);
- System.out.println(false||false);
- System.out.println(false||true);
- //逻辑非: ! 规律:相反结果
- System.out.println(!true);//false
- System.out.println(!false);//true
- //逻辑异或: ^ 规律:两个操作数相同,结果为false,不相同,结果为true
- System.out.println(true^true);
- System.out.println(true^false);
- System.out.println(false^false);
- System.out.println(false^true);
- }
- }
再做一个加深的练习:看代码 说结果:
- public class TestOpe10{
- public static void main(String[] args){
- int i=8;
- System.out.println((5>7)&&(i++==2)); //false
- System.out.println(i); //8
- int a=8;
- System.out.println((5>7)&(a++==2)); //false
- System.out.println(a); //9
- int m=8;
- System.out.println((5<7)&&(m++==2)); //false
- System.out.println(m); //9
- int b=2;
- System.out.println((5<7)&(b++==2)); //true
- System.out.println(b); //3
- int c=2;
- System.out.println((5<7)&(++c==2)); //false
- System.out.println(c); //3
- }
- }
条件运算符
【1】条件运算符:又称: 三元运算符/三目运算符
【2】格式:
a?b:c
其中a是一个布尔类型的表达式,返回结果要么是true要么false,通过a的结果决定最终表达式的结果:
如果a的结果是true,那么表达式最终结果为b
如果a的结果是false,那么表达式最终结果为c
代码:
- public class TestOpe11{
- public static void main(String[] args){
- int num = (5>7)?6:9 ;
- System.out.println(num);
- String str = (4==4)?"你好":"你不好" ;
- System.out.println(str);
- System.out.println((4==4)?"你好":"你不好");
- }
- }
练习:
- import java.util.*;//*代表所有
- public class TestOpe12{
- public static void main(String[] args){
- //实现功能:男孩女孩选择晚饭吃什么,如果意见一致,听男生的,如果意见不一致,听女生的
- //1.要让男孩女孩选择晚饭吃什么:
- Scanner sc = new Scanner(System.in);
- System.out.println("请选择今晚吃什么:1.火锅 2.烧烤 3.麻辣烫 4.西餐");
- System.out.println("请男孩选择:");
- int boyChoice = sc.nextInt();
- System.out.println("请女孩选择:");
- int girlChoice = sc.nextInt();
- //2.判断:
- System.out.println(boyChoice==girlChoice?"听男孩的":"听女孩的");
- }
- }
PS:三目运算符可以代替后续我们要学习的if-else
位运算符(了解)
位运算符:&,|,^,~ , >>,<<,>>>
如何区分逻辑运算符和位运算符:
逻辑运算符:左右连接的是布尔类型的操作数
位运算符:左右连接的是具体的数值
【1】<< 左移
3<<2 = 12
面试题: 4乘以8最快的方式: 4<<3
【2】>> 有符号右移
6>>2 = 1
-6>>2 = -2
【3】>>> 无符号右移:
6>>>2 = 1
【4】 & 与
6&3 = 2
【5】| 或
6|3=7
【6】^异或:
6^3 = 5
【7】~反:
~6 = -7
PS:
byte类型的表数范围的 -128是怎么算出来的
127: 01111111
-128: 10000000
一看就是个负数
减1: 01111111
取反: 10000000 ---》2^7 = 128
加负号: -128