学习JavaEE的日子 day04

day04

1.逻辑运算符

分类:&与 && 短路与 |或 ||短路或 ^异或 !非
1.1 & 和 | 的使用:

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

|:逻辑或(或者) 两边都为假,结果才是假,只要有一个为真,那么结果就是真。(见真即真)

**&&:**见假即假,只不过具有短路效果。

||: 见真即真,只不过具有短路效果。

^(异或)的使用:

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

!(取反)的使用:

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

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

注:&与,|或:判断l前者,还会判断后者;&&短路与,||短路或:判断了前者,不会判断后者,效率更高。

总结:

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.字符串的+操作(拼接符)

核心技巧:

两侧都是数值就是算数,一侧是拼接!

* 当+操作中出现字符串时,此时就是字符串的连接符,会将前后的数据进行拼接,并产生一个新的字符串。

* 当连续进行+操作时,从左到右逐个执行的。

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

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
		System.out.println(false?100:x);//x
		System.out.println(false?100000:x);//120

/**
三目运算符的返回值规则:
	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.运算符的优先级别

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

你可能感兴趣的:(学习JavaEE,学习,java-ee,java,学习方法)