比奇堡it小白初入java学习第三天——运算符

第三天

一,运算符

1.分类

算数运算符

赋值运算符

关系运算符

逻辑运算符

三目运算符

位运算符

2.知识点:运算符的使用

符号:+,-,*,/,%,++,–

int a = 10;
		int b = 3;
		int result = a + b;
		System.out.println(result);//13
		System.out.println(a + b);//13
		System.out.println(10 + 3);//13
		System.out.println(10 - 3);//7
		System.out.println(10 * 3);//30
		System.out.println(10 / 3);//3
		System.out.println(10 % 3);//1

注意: ++:自增

  	++a:先自增1,再使用
int a = 10;
		System.out.println(++a);//11
		System.out.println(a);//11

​ b++:先使用,再自增

int b = 10;
		System.out.println(b++);//10
		System.out.println(b);//11

​ --:自减1

​ --c:先自减1,再使用

int c = 10;
		System.out.println(--c);//9
		System.out.println(c);//9

​ d–:先使用,再自减1

int d = 10;
		System.out.println(d--);//10
		System.out.println(d);//9

二,运算符的深入

1.特殊点

特殊点1:byte类型做运算会向上转型成int类型

		byte b1 = 10;
		byte b2 = 20;
		//b1 - byte:0000,1010
		//	    int:0000,0000,0000,0000,0000,0000,0000,1010
		//b2 - byte:0001,0100
		//		int:0000,0000,0000,0000,0000,0000,0001,0100
		//		int:0000,0000,0000,0000,0000,0000,0001,1110
		//	 (byte):0001,1110
		byte result = (byte)(b1 + b2);
		System.out.println(result);

注意:

​ 1.自动转型使用最高位补位

​ 2.强制转型从最高位开始舍弃

特殊点2:short类型做运算会向上转型成int类型

		short s1 = 10;
		short s2 = 20;
		
		//s1 - short:0000,0000,0000,1010
		//	     int:0000,0000,0000,0000,0000,0000,0000,1010
		//s2 - short:0000,0000,0001,0100
		//		 int:0000,0000,0000,0000,0000,0000,0001,0100
		//		 int:0000,0000,0000,0000,0000,0000,0001,1110
		//	 (short):0000,0000,0001,1110
		
		short result = (short)(s1 + s2);
		System.out.println(result);

特殊点3:byte和short类型做运算会向上转型成int,其余数值型按照取值范围大的类型返回数据

		byte b = 10;
		short s = 10;
		int i = 10;
		long l = 10;
		float f = 10;
		double d = 10;
		
		System.out.println(b + b);//结果的数据类型是:int
		System.out.println(b + s);//结果的数据类型是:int
		System.out.println(b + i);//结果的数据类型是:int
		System.out.println(i + l);//结果的数据类型是:long
		System.out.println(i + f);//结果的数据类型是:float
		System.out.println(l + f);//结果的数据类型是:float
		System.out.println(l + d);//结果的数据类型是:double
		System.out.println(f + d);//结果的数据类型是:double

特殊点4:++a;和b++;没有区别,因为分号是执行语句的结束,不管先加还是后加都给我加

		int a = 10;
		++a;
		System.out.println(a);//11
		
		int b = 10;
		b++;
		System.out.println(b);//11

特殊点5:

		int num = 10;
		//底层实现:num = (int)(num+1);
		++num;
		System.out.println(num);

特殊点6:char类型可以做运算

		char c = 'a';//'a'的码值是97
		int i = c+1;
		System.out.println(i);//98

2.面试例题

1.经典面试题一:输出结果为?

			int a = 8;
			int b = (a++)+(++a)+(a*10);
			//a = 10
			//b = 8 + 10 + 10*10
			System.out.println(b);

2.经典面试题二:输出结果为?

			int i = 0 ;   
			//底层实现:
			// i = (int)(i+1);
			// i = i;
			i = ++i; 
			System.out.println(i);//1

3.经典面试题三:输出结果为?

			int i = 0;   
			//底层实现:
			// int temp = i;//temp作为临时变量,记录了i最初始的值 -- 0
			// i = (int)(i+1);//i确确实实自增了-- 1
			// i = temp;//将temp赋值给i -- 0
			i = i++;  
			System.out.println(i);//0

三,赋值运算符

1,符号

=,+=,-=,*=,/=,%=

注意:

​ =为赋值运算符,将右边的值赋值给左边的变量

		int num = 10;
		
		num += 5;//num = (int)(num+5);
		num -= 5;//num = (int)(num-5);
		num *= 5;//num = (int)(num*5);
		num /= 5;//num = (int)(num/5);
		num %= 3;//num = (int)(num%3);
		
		System.out.println(num);

2.面试例题

1.经典面试例题一:输出结果为?

			int a,b; //一次性声明多个变量
			a = b = 100;//将100赋值给b,再将b赋值给a
			System.out.println(a); //100
			System.out.println(b); //100

2.经典面试题二:下面的两种写法结果分别是?

			short s=1; 
			s = s+1; //short和int做运算会向上转型成int,如果没有强转就会报错

			short s=1; 
			s += 1;

3.赋值规则

s += 1 s = (short)((s) + (1))
复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1) op (E2)),其中T是E1的类型。

四.关系运算符

1.符号

==、!=、>、>=、<、<=

注意:

​ ==为判断两个值是否相等

​ !=判断两个值是否不相等
​ 关系运算符的结果必须是boolean

		boolean bool = 10 == 20;
		System.out.println(bool);//false
		System.out.println(10 != 20);//true
		System.out.println(10 >  20);//false
		System.out.println(10 >= 20);//false
		System.out.println(10 <  20);//true
		System.out.println(10 <= 20);//true

2.面试例题

1.经典面试题一:输出结果为?

			int x = 10;
			int y = 10;
			boolean flag = (x == y);
			System.out.println(flag);//true
			flag = (x = y);//会报错 -- 因为boolean类型不能与其他类型兼容
			System.out.println(flag);

2.经典面试题二:输出结果为?

            boolean b1 = true;
			boolean b2 = false;
			boolean b3 = (b1 == b2);
			System.out.println(b3);//false
			boolean b4 = (b1 = b2);
			System.out.println(b4);//false

五,字符串拼接符

1.符号

注意:

​ +两侧都是数值,该符号为算数运算符

​ +两侧有一侧或两侧是字符串,该符号为字符串拼接符

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

六,Scanner类

1.理解

Scanner是java提供的专门用于在控制台输入数据的类

//导包
import java.util.Scanner;
		//创建Scanner类的对象
		//人类  郭丹 = 新建 人类();
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入int类型的数据:");
		int i = scan.nextInt();//用户可以在控制台输入数据,并把数据赋值给i
		
		System.out.println("请输入double类型的数据:");
		double d = scan.nextDouble();
	
		System.out.println("请输入字符串类型的数据:");
		String str = scan.next();

		System.out.println(i);
		System.out.println(d);
		System.out.println(str);
		
		//错误示范:Scanner没有输入字符的功能
		//System.out.println("请输入字符类型的数据:");
		//char c = scan.nextChar();
		//System.out.println(c);

七,逻辑运算符

1.符号

  	&与		&&短路与
  	|或		||短路或
  	^异或
  	!非

注意:

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

​ 2.&、&&、|、||、^ 两侧都是boolean类型数据

		//&与:前后两侧都是boolean值,两侧都为true,结果才为true
		System.out.println(true & true);//true
		System.out.println(false & true);//false
		System.out.println(true & false);//false
		System.out.println(false & false);//false

		//&&短路与:前后两侧都是boolean值,两侧都为true,结果才为true
		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后,不会判断后者,直接返回false,所以效率更高
		//ArithmeticException - 算数异常
		System.out.println(false && 10/0>3);
		//|或:前后两侧都是boolean值,两侧有为true,结果就为true
		System.out.println(true | true);//true
		System.out.println(false | true);//true
		System.out.println(true | false);//true
		System.out.println(false | false);//false
		//||短路或:前后两侧都是boolean值,两侧有为true,结果就为true
		System.out.println(true || true);//true
		System.out.println(false || true);//true
		System.out.println(true || false);//true
		System.out.println(false || false);//false
		//| vs ||
		//|或:判断前者为true后,还会判断后者
		//||短路或:判断前者为true后,不会判断后者,直接返回true,所以效率更高
		System.out.println(true || 10/0>3);
		//^异或:前后两侧都是boolean值,两侧相同为false,不同为true
		System.out.println(true ^ true);//false
		System.out.println(false ^ true);//true
		System.out.println(true ^ false);//true
		System.out.println(false ^ false);//false
		//!非:置反
		boolean bool1 = true;
		System.out.println(!bool1);//false
		
		boolean bool2 = false;
		System.out.println(!bool2);//true

2.练习

练习题:在dos窗口输入一个数字,判断是否在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);

八,表达式

5+6 算数表达式

5>6 关系表达式

九,三目运算符/三元运算符

1.语法规则

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

2.理解

表达式的结果必须是boolean值

  	true - 将值1赋值给变量
  	false- 将值2赋值给变量

做实验:

			int num = (false)?10:20;
			System.out.println(num);

3.案例

案例1:在控制台输入两个int类型的数据,判断大小,输出最大值

			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;//判断a是否大于b,如果成立就返回a,否则返回b
			System.out.println("最大值为:" + max);

案例2:在控制台输入三个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;
			System.out.println("最大值为:" + max);

案例3:在控制台输入二个int类型的数据,判断大小,输出最小值

			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:在控制台输入三个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);

4.拓展面试题

扩展面试题1:

System.out.println((false)?10.9:9);//9.0

扩展面试题2:

			char x = 'x';//码值 - 120
			int i = 10;
			System.out.println(false?i:x);//120

扩展面试题3:

			char x = 'x';//码值 - 120
			System.out.println(false?100:x);//x
			System.out.println(false?100000:x);//120

拓展- 常量:在程序执行过程中,不可发生改变的量

注意:数字字面量就是常量的一种

5.三目运算符返回规则

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

十,位运算符

1.理解

将十进制的数据转换为二进制做运算符

2.符号

  	&与		|或		^异或
  	<< 左移
  	>> 右移
  	>>> 无符号位右移

3.要点

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

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

^异或:同位比较,两者不同为1,相同为0

注意:
&、|、^前后两侧是数值,该符号为位运算符
&、|、^前后两侧是布尔值,该符号为逻辑运算符

//<<左移:整体向左移动n位,就用n个0补位(补到最低位)
//注意:左移一位相等于乘2

//>>右移:整体向右移动n位,就用n个最高位/符号位补位(补到最高位)
//注意:右移一位相等于除2

//>>>无符号位右移:整体向右移动n位,就用n个0补位(补到最高位)
//注意:>>和>>>在处理正数的情况下没有区别

4.面试题拓展

1.描述下列代码运行结果

考点:char类型的取值范围没有负数,向上转型是用0补位

		 -1 - int1111,1111,1111,1111,1111,1111,1111,1111
		 byte1111,1111
		 char1111,1111,1111,1111
		 int0000,0000,0000,0000,1111,1111,1111,1111
		System.out.println((int)(char)(byte)-1);//65535

十一,总结

1.算数运算符(+、-、*、/、%、++、–)
注意:特殊点和面试题

2.赋值运算符(=、+=、-=、*=、/=、%=)
注意:复合赋值的底层公式

3.关系运算符(==、!=、>、>=、<、<=)
注意:关系运算符的结果都是boolean类型的值

4.字符串拼接符(+)

5.Scanner类
注意:感受面相对象的思想

6.逻辑运算符(&、&&、|、||、^、!)
注意:逻辑运算符的结果都是boolean类型的值

7.三目运算符
注意:语法结构、返回值规则

8.位运算符(&、|、^、<<、>>、>>>)

9.运算符的优先级别(不用记,灵活运用小括号)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值