零基础学Java第三天之运算符的理解

一、运算符

1、算数运算符

1、基础

符号:加 +、减 -、乘 *、除/、取模%、自增++、自减–

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);//int类型取整数
System.out.println(10 % 3);//1  最终结果为除了之后的余数

//++:自增1
//++a:先自增1,再使用
int a = 10;
System.out.println(++a);//11
System.out.println(a);//11
		
//b++:先使用,再自增1
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


2、深入特殊点

1、特殊点1
//特殊点1:byte做运算,会向上转型成int,再做运算
		byte b1 = 10;
		byte b2 = 20;
		
    //b1=10;-- byte:0000,1010
  //(int)10:0000,0000,0000,0000,0000,0000,0000,1010

//byte b2=20:0001,0100	
   //(int)20:0000,0000,0000,0000,0000,0000,0001,0100

		byte result = (byte)(b1+b2);
	//b1+b2 结果为int类型:0000,0000,0000,0000,0000,0000,0001,1110
	//强制转型为(byte):0001,1110
		System.out.println(result);
2、特殊点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
	
		short result = (short)(s1+s2);
// 结果:0000,0000,0000,0000,0000,0000,0001,1110
//(short):0000,0000,0001,1110
		
		System.out.println(result);
3、特殊点3
//特殊点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(s + i);//结果是int类型
		System.out.println(i + l);//结果是long类型
		System.out.println(s + 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、特殊点4
//特殊点4:浮点类型做运算可能会失去精度,失去精度问题可以使用	BigInteger或BigDecimal去解决
		double d1 = 0.5;
		double d2 = 0.4;
System.out.println(d1-d2);//0.09999999999999999998
5、特殊点5
		
//特殊点5:++a; 和 a++; 没有区别,因为分号为执行语句的结束符,不管先加还是后加都给我自增1
		int a = 10;
		//++a;
		a++;//10
		System.out.println(a);//11
6、特殊点6
//特殊点6:++底层会强壮
		int a = 10;
		++a;//底层实现:a = (int)(a+1);
		System.out.println(a);//11
		
7、特殊点7

//特殊点7:char类型可以做算数运算
		char c = 'a';//'a'字符的码值是97
		System.out.println(c+1);//98
		
8、特殊点8

//特殊点8:boolean不能与其他类型兼容
		boolean bool = true;
		System.out.println(bool + 1);

3、深入理解

经典题一:输出结果为?
			int a = 8;
			int b = (a++)+(++a)+(a*10);
					   //在这个加号之前是9,加号之后为10
			//a = 10
			//b = 8 + 10 + 100
			System.out.println(b);//118
			
经典题二:输出结果为?
			int i = 0;   
			//底层原理:
			//i = (int)(i+1);
			//i = i;
			i = ++i; //先自增再赋值给i
			System.out.println(i);//1
			
经典题三:输出结果为?
		int i = 0;   
底层原理:
//int temp = i; -- temp作为临时变量,记录了i最初始的值-0
		//i = (int)(i+1); -- 变量i确实自增了
		//i = temp; -- 将temp赋值给i,i又变回了原来的值
    
    	//也可以这样理解,i++是先使用后赋值,相当于就是先把i的值赋值给i,然后右边的i自增
		i = i++; 
		//但是因为已经完成赋值,所以下面的i还是0
		System.out.println(i); //先使用再自增,目前还是0

2、赋值运算符

1、符号

=、 +=、 -=、 *=、 /=、 %=

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

2、深入理解

	经典题一:输出结果为?
		int a,b; //一次性声明多个变量
		a = b = 100;//1.将100赋值给b 2.将b中数据赋值给a
		System.out.println(a); //100
		System.out.println(b); //100
		
	经典题二:下面的两种写法结果分别是?
		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的类型。

3、关系运算符

1、符号

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

等于、不等于、大于、大于等于、小于、小于等于 赋值

2、基础

		boolean bool = 10 == 5;
		//声明布尔类型的变量 bool   给bool进行赋值,判断10等于5是否十正确
		System.out.println(bool);//false
		System.out.println(10 != 5);//true
		//理解:系统输出打印10不等于5的结果
		System.out.println(10 >  5);//true
		//理解:系统输出打印10大于5的结果
		System.out.println(10 >= 5);//true
		//理解:系统输出打印10大于等于5的结果
		System.out.println(10 <  5);//false
		//理解:系统输出打印10小于5的结果
		System.out.println(10 <= 5);//false	
		//理解:系统输出打印10小于等于5的结果

3、深入理解

//经典题一:输出结果为?
		int x = 10;
		int y = 10;
		boolean flag = (x == y);
		System.out.println(flag);//true
		flag = (x = y);//会报错,因为boolean类型不能与其他类型兼容
		System.out.println(flag);
	
	//经典题二:输出结果为?
		boolean b1 = true;
		boolean b2 = false;
		boolean b3 = (b1 == b2);
		System.out.println(b3);//false
		boolean b4 = (b1 = b2);
		System.out.println(b4);//false	

4、小结

关系运算符的结果都是boolean值

=为赋值号,将赋值号右边的数据赋值给左边的变量,他是赋值运算符
==表示判断两个值是否相同,他是关系运算符
!=表示判断两个值是否不相同,感叹号是英文

4、逻辑运算符

1、符号

&(与)、&&(短路与)

|(或) 、||(短路或)、

!(非)、

^(异或)。

2、基础

		//&与:前后两侧都是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

3、理解

3、理解

& 和 && 理解:两个有一侧为false,结果为false

| 和 || 规则 :两侧有一侧为true,结果为true

^ 规则:两侧相同为false,不同为true

!规则:置反,false变成true , true变成false

4、注意

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

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

5、三目运算符/三元运算符

1、语法

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

2、理解

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

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、三目返回值规则

1.值1和值2都是常量的情况,按照取值范围大的类型返回数据

2.值1和值2都是变量的情况,按照取值范围大的类型返回数据

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

2、扩展题型
	//扩展题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

6、字符串拼接符

1、符号

+号

2、理解

public static void main(String[] args){
	
    //从左到右依次执行,前面是数字之间的相加,遇到字符串然后开始凭借
	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、注意

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

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

7、位运算符

1、符号

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

2、理解

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

3、案例表述

1、案例( & )
//&与:同位比较,两者为1,结果才为1
	byte b1 = 19;//0001,0011
	byte b2 = 21;//0001,0101
				 //0001,0001	
//b1 - byte:0001,0011
//	   int:0000,0000,0000,0000,0000,0000,0001,0011
//b2 - byte:0001,0101
//		int:0000,0000,0000,0000,0000,0000,0001,0101
//		int:0000,0000,0000,0000,0000,0000,0001,0001
//	 (byte):0001,0001
	byte result = (byte)(b1 & b2);
	System.out.println(result);//17 - 0001,0001
2、案例( I 或 )
		
//|或:同位比较,两者有1,结果就为1
int i1 =19;//0000,0000,0000,0000,0000,0000,0001,0011
int i2 =21;//0000,0000,0000,0000,0000,0000,0001,0101
		   //0000,0000,0000,0000,0000,0000,0001,0111
		System.out.println(i1 | i2);//23
3、案例( ^异或 )
//^异或:同位比较,两者不同为1,相同为0
int i1 =19;//0000,0000,0000,0000,0000,0000,0001,0011
int i2 =21;//0000,0000,0000,0000,0000,0000,0001,0101
		   //0000,0000,0000,0000,0000,0000,0001,0110
		System.out.println(i1 ^ i2);//6
4、案例左移
//<<左移:整体向左移动n位,就用n个0补位(补到最低位)
		//注意:左移一位相等于乘2
int i=1024;//0000,0000,0000,0000,0000,0100,0000,0000
		   //0000,0000,0000,0000,0001,0000,0000,0000
		   System.out.println(i << 2);//4096

5、案例右移
//>>右移:整体向右移动n位,就用n个最高位/符号位补位(补到最高位)
//注意:右移一位相等于除2
int a=1024;//0000,0000,0000,0000,0000,0100,0000,0000
		   //0000,0000,0000,0000,0000,0001,0000,0000
	System.out.println(a >> 2);//256
int b=-1024;//1111,1111,1111,1111,1111,1100,0000,0000
		   //1111,1111,1111,1111,1111,1111,0000,0000
		System.out.println(b >> 2);//-256

6、案例无符号为右移
//>>>无符号位右移:整体向右移动n位,就用n个0补位(补到最高位)
		//注意:>>和>>>在处理正数的情况下没有区别
int c=1024;//0000,0000,0000,0000,0000,0100,0000,0000
		   //0000,0000,0000,0000,0000,0001,0000,0000
	System.out.println(c >> 2);//256
int d=-1024;//1111,1111,1111,1111,1111,1100,0000,0000
		//0011,1111,1111,1111,1111,1111,0000,0000
	System.out.println(d >>> 2);//1073741568


8、表达式

5+6:算数表达式

5>6:关系表达式

5|6:位运算表达式

9、Scanner类

1、简介

Java给我们提供的专门用于在控制台输入数据的类

2、使用步骤

  1. 导包:import java.util.Scanner;

  2. 创建对象:Scanner scan = new Scanner(System.in);

  3. 调用方法(功能):int num = scan.nextInt();

3、细节

  1. 使用Java提供的类需要在java文件中的第一行导入包

  2. 使用功能必须要先创建对象

  3. 创建对象 类型 引用 = 新建的对象

    ​ Scanner scan = new Scanner(System.in);

  4. 方法介绍:调用方法必须使用对象所对应的引用进行调用

    ​ int num = scan.nextInt();

    ​ 在窗口输入一个整数类型数字并赋值给程序中的num变量

    ​ double num = scan.nextDouble();

    ​ 在窗口输入一个浮点类型数字并赋值给程序中的num变量

    ​ String str = scan.next();

    ​ 在窗口输入一个字符串并赋值给程序中的str变量

    5.方法调用几次,就可以在窗口输入几次

4、举例

//导包
import java.util.Scanner;

public class Test09{
	/**
	知识点:Scanner类
	理解:Java给我们提供的专门用于在控制台输入数据的类
		
	*/
	public static void main(String[] args){
		
		//创建Scanner类的对象
		//人类  某人 = 新建 人类();
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入int数据:");
		int i = scan.nextInt();
		
		System.out.println("请输入double数据:");
		double d = scan.nextDouble();
		
		System.out.println("请输入String数据:");
		String str = scan.next();
		
        //系统打印输出输入的值
		System.out.println(i);
		System.out.println(d);
		System.out.println(str);
	}
	
}
  • 46
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值