学习JavaEE的日子 day04 逻辑运算符,三目运算符,位运算符

day04

1.逻辑运算符

分类:&与 && 短路与 |或 ||短路或 ^异或 !非

1.1 & 和 | 的使用

&:逻辑与(而且) 两边都为真,结果才是真,只要有一个为假,那么结果就是假。(见假即假)

&&:见假即假,只不过具有短路效果。(左边为false后,不会判断后面,效率更高)

|:逻辑或(或者) 两边都为假,结果才是假,只要有一个为真,那么结果就是真。(见真即真)
||: 见真即真,只不过具有短路效果。(左边为true后,不会判断后面,效率更高)

1.2 ^(异或)的使用

计算规则:如果两边相同,为false,如果两边不同,为true

1.3 !(取反)的使用

是取反,也叫做非。 false取反就是true,true取反就是false

温馨提示:取反最多只用一个。

总结:

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

4.&& 和 & 、||和|的运行结果都是一模一样的,但是短路逻辑运算符可以提高程序的运行效率。

建议:

最为常用: && || !

//练习题:在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);

2.字符串的+操作(拼接符)

核心技巧:两侧都是数值就是算数,一侧是拼接!

特例:字符串只有+操作,没有其他操作

System.out.println(1+2+"abc"+"def"+1+2);  //3abcdef12

3.字符的+操作

规则:

当+操作中出现了字符,会拿着字符到计算机内置的ASCII码表中去查对应的数字,然后再进行计算。

// 案例:

char c = 'a';

int result = c + 0;

System.out.println(result);//97

//ASCII码表中: 'a'  -----   97       'A'  -----   65

4.三元运算符

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

计算规则:

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

注意点:

三元运算符的最终结果一定要被使用,要么赋值给一个变量,要么直接打印出来。

需求:在控制台输入3个int类型的数字,由小到大输出

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);

扩展面试题1:

int a = 5;
System.out.println((a<5)?10.9:9);//9.0 都是数字字面量

扩展面试题2:

char x = 'x';//Unicode - 120
int i = 10;
System.out.println(false?i:x);//120  都是变量

扩展面试题3:

char x = 'x';//Unicode - 120 变量,范围:0-65535
System.out.println(false?100:x);//x
System.out.println(false?100000:x);//120 
//100000不在char范围里

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

扩展 - 常量:程序执行过程中不可发生改变的量
注意:数字字面量(给出来的值)就是常量的一种

5.位运算符

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

	//&与:同位比较,两者为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
	//>>>无符号位右移:整体向右移动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

6. 进制与转换

十六进制A-F:10-15

计算机的二进制是以补码形式表示的

补码:正数与原码的形式一样,负数:将该数的绝对值的二进制形式,按位取反再加1。

7.运算符的优先级别

经验:不用记,灵活运用小括号

8.简答题

1.用最有效率的方法计算 2 乘以 8

2 << 3 --> 2*8(左移 3 位相当于乘以 2 的 3 次方,右移 3 位相当于除以 2 的 3 次方)。
例:System.out.println(64>>3); //8 -->64 / 2 的 3 次方

总结

1.逻辑运算符 – 结果都是boolean类型

2.字符串拼接符

3.三目运算符 – 注意:返回值规则、需求、面试题

4.位运算符 – 注意:理解运算过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A 北枝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值