04运算符【逻辑、三目、位】、运算符优先级、字符串拼接符

Day04

1.逻辑运算符

理解:

​ 符号:
​ &与 &&短路与 |或 ||短路或 ^异或 !非

​ 注意:
​ 1.逻辑运算符运行结果都是boolean类型
​ 2.&、&&、|、||、^ 两侧都是boolean类型数据
​ 3.!为非,就是置反,true变成false,false变成true

使用:

(1)&与、&&短路与

&与:前后两侧接boolean值,两者都为true,结果才为true

&&短路与:前后两侧接boolean值,两者都为true,结果才为true

ps:

	System.out.println(true & true);//true
	System.out.println(false & true);//false
	System.out.println(true & false);//false
	System.out.println(false & false);//false
& vs &&

&与:判断前者为false后,还会判断后者
&&短路与:判断前者为false后,不会判断后者,效率更高

(2)|或、||短路或

|或:前后两侧接boolean值,两者有一个为true,结果就为true

||短路或:前后两侧接boolean值,两者有一个为true,结果就为true

| vs ||

|或:判断前者为true后,还会判断后者
||短路或:判断前者为true后,不会判断后者,效率更高

(3)ArithmeticException - 算数异常
	System.out.println(false && 10/0>5);

	System.out.println(true || 10/0>5);
(4)^异或

^异或:前后两侧接boolean值,两者不同为true,相同为false

(5)!非:置反
	boolean bool1 = true;
	System.out.println(!bool1);//false

	//& vs &&//&与:判断前者为false后,还会判断后者//&&短路与:判断前者为false后,不会判断后者,效率更高//ArithmeticException - 算数异常System.out.println(false && 10/0>5);
​	
​	//|或:前后两侧接boolean值,两者有一个为true,结果就为trueSystem.out.println(true | true);//trueSystem.out.println(false | true);//trueSystem.out.println(true | false);//trueSystem.out.println(false | false);//false
​	
​	//||短路或:前后两侧接boolean值,两者有一个为true,结果就为trueSystem.out.println(true || true);//trueSystem.out.println(false || true);//trueSystem.out.println(true || false);//trueSystem.out.println(false || false);//false
​	
​	//| vs ||//|或:判断前者为true后,还会判断后者//||短路或:判断前者为true后,不会判断后者,效率更高System.out.println(true || 10/0>5);
​	
​	//^异或:前后两侧接boolean值,两者不同为true,相同为falseSystem.out.println(true ^ true);//falseSystem.out.println(false ^ true);//trueSystem.out.println(true ^ false);//trueSystem.out.println(false ^ false);//false
​	
​	//!非:置反boolean bool1 = true;System.out.println(!bool1);//falseboolean bool2 = false;System.out.println(!bool2);//true

练习题

在cmd窗口输入一个数字,判断是否在50~100的区间内

		Scanner scan = new Scanner(System.in);
	
		System.out.println("请输入数字:");
		int num = scan.nextInt();
		
		boolean bool = num>=50 && num<=100;
		System.out.println("该数字是否在50~100的区间内:" + bool);	
	
		scan.close();

2.字符串拼接符

理解:

符号:+
注意:
+两侧都是数值,此符号为算数运算符
+两侧有一侧或两侧都是字符串,此符号字符串拼接符

使用:
	System.out.println(1 + 2 + "abc" + "def" + 1 + 2);
	//					 3   + "abc" + "def" + 1 + 2
	//						"3abc"   + "def" + 1 + 2
	//							"3abcdef"    + 1 + 2
	//								"3abcdef1"   + 2
	//									 "3abcdef12"

3.三目运算符(三元运算符)

表达式

​ 5+6 算数表达式
​ 5>6 关系表达式

理解:

Java中的三目运算符也称为条件运算符,是一种简单的条件语句,可以用于替代if-else语句中简单的判断条件

语法规则:

一个判断条件,一个true结果和一个false结果。

​ 变量 = (表达式)?值1:值2;

注意:表达式的结果必须是boolean
true - 将值1赋值给变量
false - 将2赋值给变量

需求

		需求1:在控制台输入2int类型的数字,输出最大值
			Scanner scan = new Scanner(System.in);
		
			System.out.println("请输入第一个数字:");
			int a = scan.nextInt();
			System.out.println("请输入第二个数字:");
			int b = scan.nextInt();
			
			int max = (a>b)?a:b;
			System.out.println("最大值为:" + max);
			
		需求2:在控制台输入3int类型的数字,输出最大值
			Scanner scan = new Scanner(System.in);
		
			System.out.println("请输入第一个数字:");
			int a = scan.nextInt();
			System.out.println("请输入第二个数字:");
			int b = scan.nextInt();
			System.out.println("请输入第三个数字:");
			int c = scan.nextInt();
			
			int max = (a>b)?a:b;
			max = (max>c)?max:c;
			System.out.println("最大值为:" + max);
			
		需求3:在控制台输入2int类型的数字,输出最小值
			Scanner scan = new Scanner(System.in);
		
			System.out.println("请输入第一个数字:");
			int a = scan.nextInt();
			System.out.println("请输入第二个数字:");
			int b = scan.nextInt();
			
			int min = (a<b)?a:b;
			System.out.println("最小值为:" + min);
		
		需求4:在控制台输入3int类型的数字,由小到大输出
			Scanner scan = new Scanner(System.in);
		
			System.out.println("请输入第一个数字:");
			int a = scan.nextInt();
			System.out.println("请输入第二个数字:");
			int b = scan.nextInt();
			System.out.println("请输入第三个数字:");
			int c = scan.nextInt();
			
			//最大值
			int max = (a>b)?a:b;
			max = (max>c)?max:c;
			
			//最小值
			int min = (a<b)?a:b;
			min = (min<c)?min:c;
			
			//中间值
			int mid = a+b+c-max-min;
			
			System.out.println(min + "<" + mid + "<" + max);

面试题

		扩展面试题1int a = 5;
			System.out.println((a<5)?10.9:9);//9.0
			
		扩展面试题2char x = 'x';//Unicode - 120
			int i = 10;
			System.out.println(false?i:x);//120
			
		扩展面试题3char x = 'x';//Unicode - 120
			System.out.println(false?100:x);//x
			System.out.println(false?100000:x);//120

扩展 - 常量:

程序执行过程中不可发生改变的量
注意:数字字面量就是常量的一种

三目运算符的返回值规则:

​ 1.值1和值2都是常量的情况,按照取值范围大的类型返回数据
​ 2.值1和值2都是变量的情况,按照取值范围大的类型返回数据
​ 3.值1和值2一个是常量一个是变量的情况,判断常量是否在变量所属的取值范围内
​ 在 - 按照变量的类型返回数据
​ 不在 - 按照常量的类型返回数据

4.位运算符

理解:

将十进制的数据转换为二进制再做运算
符号:
&与 |或 ^异或
<<左移 >>右移 >>>无符号位右移

使用(运算过程,考虑转型)

&与:

同位比较,两者为1,结果才为1

		byte b1 = 23;//0001,0111
		byte b2 = 27;//0001,1011
					 //0001,0011
		
		//b1 - byte:0001,0111
		//		int:0000,0000,0000,0000,0000,0000,0001,0111
		//b2 - byte:0001,1011
		//		int:0000,0000,0000,0000,0000,0000,0001,1011
		//	    结果:0000,0000,0000,0000,0000,0000,0001,0011
		//	 (byte):0001,0011
		byte result = (byte)(b1 & b2);
		System.out.println(result);//19 - 0001,0011	
|或:

同位比较,两者有1,结果就为1

		byte b1 = 23;//0001,0111
		byte b2 = 27;//0001,1011
					 //0001,1111
		
		//b1 - byte:0001,0111
		//		int:0000,0000,0000,0000,0000,0000,0001,0111
		//b2 - byte:0001,1011
		//		int:0000,0000,0000,0000,0000,0000,0001,1011
		//	    结果:0000,0000,0000,0000,0000,0000,0001,1111
		//	 (byte):0001,1111
		byte result = (byte)(b1 | b2);
		System.out.println(result);//31 - 0001,1111
^异与:

同位比较,两者相同为0,不同为1

		byte b1 = 23;//0001,0111
		byte b2 = 27;//0001,1011
					 //0000,1100
		
		//b1 - byte:0001,0111
		//		int:0000,0000,0000,0000,0000,0000,0001,0111
		//b2 - byte:0001,1011
		//		int:0000,0000,0000,0000,0000,0000,0001,1011
		//	    结果:0000,0000,0000,0000,0000,0000,0000,1100
		//	 (byte):0000,1100
		byte result = (byte)(b1 ^ b2);
		System.out.println(result);//12 - 0000,1100		
<<左移:

整体向左移动n位,就用n个0补位(补到最低位)

		int num = 128;//0000,0000,0000,0000,0000,0000,01000,0000
		System.out.println(num << 2);//512 - 0000,0000,0000,0000,0000,0010,0000,0000	
>>右移:

整体向右移动n位,就用n个最高位补位(补到最高位)

	int a = 128;//0000,0000,0000,0000,0000,0000,01000,0000
	System.out.println(a >> 2);//32 - 0000,0000,0000,0000,0000,0000,0010,0000
	
	int b = -128;//1111,1111,1111,1111,1111,1111,1000,0000
	System.out.println(b >> 2);//-32 - 1111,1111,111,1111,1111,1111,1110,0000
>>>无符号位右移:

整体向右移动n位,就用n个0补位(补到最高位)

		int c = 128;//0000,0000,0000,0000,0000,0000,01000,0000
		System.out.println(c >>> 2);//32 - 0000,0000,0000,0000,0000,0000,0010,0000
		
		int d = -128;//1111,1111,1111,1111,1111,1111,1000,0000
		System.out.println(d >>> 2);//1073741792 - 0011,1111,111,1111,1111,1111,1110,0000

小结:

​ &、|、^:前后两侧都是数值,此符号为位运算符
​ &、|、^:前后两侧都是boolean值,此符号为逻辑运算符
​ 左移1位,相当于乘以2
​ 右移1位,相当于除以2

5.运算符的优先级

​ 经验:不用记,灵活运用小括号
参考表运算符的优先级

  • 20
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值