Day03运算符

一、算数运算符

1、算数运算符的基本使用

主要算数运算符:+、-、*、/、%、++、–

public class Test01{
	
	public static void main(String[] args){
			知识点:算数运算符的基本使用
			
			+-*/%++--
			
			int num1 = 10;
			int num2 = 5;
			int result = num1 + num2;
			System.out.println(result);//15
			System.out.println(num1 - num2);//5
			System.out.println(10 * 5);//50
			System.out.println(10 / 5);//2
			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)、案例一:byte类型做运算,会向上转型成int

public class Test02{
    public static void main(String[] args){
        案例一:byte类型做运算,会向上转型成int
			byte b1 = 10;
			byte b2 = 20;
			//10 - byte - 8位:0000,1010
			//10 - int  -32位:0000,0000,0000,0000,0000,0000,0000,1010
			//20 - byte - 8位:0001,0100
			//20 - int  -32位:0000,0000,0000,0000,0000,0000,0001,0100
			//30 - int  -32位:0000,0000,0000,0000,0000,0000,0001,1110
			//30 - byte - 8位:0001,1110
			byte result = (byte)(b1+b2);
			System.out.println(result);
    }
}

(2)、案例二:short类型做运算,会向上转型成int

public class Test02{
    public static void main(String[] args){
        short s1 = 10;
			short s2 = 20;
			short result = (short)(s1+s2);
			System.out.println(result);
    }
}

(3)、案例三:描述下列计算结果的类型

public class Test02{
    public static void main(String[] args){
       byte b = 10;
			short s = 10;
			int i = 10;
			long l = 10;
			float f = 1.1F;
			double d = 2.2;
			System.out.println(b+s);//int类型
			System.out.println(i+s);//int类型
			System.out.println(l+s);//long类型
			System.out.println(i+l);//long类型
			System.out.println(i+f);//float类型
			System.out.println(i+d);//double类型 
    }
}

(4)、案例四:浮点类型不能直接做运算,要做运算会使用BigDecimal

public class Test02{
    public static void main(String[] args){
        //字面量在1之内才会出现
        double d1 = 0.5;
			double d2 = 0.4;
			System.out.println(d1-d2);//0.09999999999999998
    }
}

(5)、案例5:'a’的ASCII是97

public class Test02{
    public static void main(String[] args){
      	 	char c = 'a';
			System.out.println(c+1);//98
    }
}

3、经典面试题

(1)、经典面试题一

public class Test02{
    public static void main(String[] args){
        //输出结果
        	int a = 8;
			int b = (a++)+(++a)+(a*10);
			System.out.println(b);//118
			//a = 10
			//b = 8 + 10 + 100
    }
}

(2)、经典面试题二重点

public class Test02{
    public static void main(String[] args){
        	int i =  0;   
			i = ++i; 
			//底层原理:
			//i = (int)(i+1);
			//i = i;
			System.out.println(i);//1
			
			int i = 0;   
			i = i++;  
			//底层原理:
			//int temp = i;--temp用于记录i最初的值
			//i = (int)(i+1);
			//i = temp
			System.out.println(i);//0 
        
        扩展1byte b = 10;
			++b;//底层:b = (byte)(b+1);
			short s = 10;
			++s;//底层:s = (short)(s+1);
			int i = 10;
			++i;//底层:i = (int)(i+1);
			long l = 10;
			l++;//底层:l = (long)(l+1);
			
		扩展2int i = 10;
			//++i; 和 i++; 没有区别,因为分号是一条执行语句的结束,不管先加还是后加都给我加
			//++i;
			//i++;
			System.out.println(i);
    }
}

二、赋值运算符

主要赋值运算符:=、+=、-=、*=、/=、%=

public class Test03{
	
	public static void main(String[] args){
			知识点:赋值运算符
			
			=+=-=*=/=%=
			
			int i = 10;
		
			i += 10;//i = (int)(i+10);
			i -= 10;//i = (int)(i-10);
			i *= 5 ;//i = (int)(i*5);
			i /= 5 ;//i = (int)(i/5);
			i %= 3 ;//i = (int)(i%3);
			System.out.println(i);//1
			
			经典面试题一:输出结果为?
				//一次性声明多个变量
				int a,b; 
				a = b = 100;//把100赋值给b,b再赋值给a
				System.out.println(a);//100
				System.out.println(b);//100
				
			经典面试题二:下面的两种写法结果分别是?
				short s=1; 
				s = s+1;//报错:short类型的变量s 与 int类型的数字字面量1 做运算的结果是int类型 

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

三、关系运算符

主要的关系运算符:==、!=、>、>=、<=

总结:
1.=是赋值号,==是判断两个值是否相等
2.关系运算符运算的结果都是boolean值

public class Test04{
	
	public static void main(String[] args){
			知识点:关系运算符
			
			==!=>>=<=
			
			System.out.println(10 == 10);//true
			System.out.println(10 != 10);//false
			System.out.println(10 > 10);//false
			System.out.println(10 >= 10);//true
			System.out.println(10 < 10);//false
			System.out.println(10 <= 10);//true
			
			总结:
				1.=是赋值号,==是判断两个值是否相等
				2.关系运算符运算的结果都是boolean值
				
			经典面试题一:输出结果为?
				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
	}
}

四、逻辑运算符

1、&与 &&短路与

2、|或 ||短路或
3、^异或
4、!非

public class Test05{
	
	public static void main(String[] args){
			知识点:逻辑运算符
			
			&&&短路与
			|||短路或
			^异或
			!//&与:前后两者都是boolean值,同时成立(true),结果才为true
			System.out.println(true & true);//true
			System.out.println(true & false);//false
			System.out.println(false & true);//false
			System.out.println(false & false);//false
			
			//&&短路与:前后两者都是boolean值,同时成立(true),结果才为true
			System.out.println(true && true);//true
			System.out.println(true && false);//false
			System.out.println(false && true);//false
			System.out.println(false && false);//false
			
			//& vs &&
			//&:判断前者为false后,才会判断后者
			//&&:判断前者为false后,不会判断后者,所以效率更高
			//ArithmeticException - 算数类异常
			System.out.println(false && 10/0>5);
			
			//|或:前后两者都是boolean值,有一个成立(true),结果就为true
			System.out.println(true | true);//true
			System.out.println(true | false);//true
			System.out.println(false | true);//true
			System.out.println(false | false);//false
			
			//||短路或:前后两者都是boolean值,有一个成立(true),结果就为true
			System.out.println(true || true);//true
			System.out.println(true || false);//true
			System.out.println(false || true);//true
			System.out.println(false || false);//false
			
			//| vs ||
			//|:判断前者为true,还会判断后者
			//||:判断前者为true,不会判断后者,所以效率更高
			System.out.println(true || 10/0>5);
			
			//^异或:前后两者都是boolean值,相同为false,不同为true
			System.out.println(true ^ true);//false
			System.out.println(true ^ false);//true
			System.out.println(false ^ true);//true
			System.out.println(false ^ false);//false
			
			//!非 - 置反
			boolean bool1 = true;
			System.out.println(!bool1);//false
			
			boolean bool2 = false;
			System.out.println(!bool2);//true
	}
}

1、逻辑运算符案例

import java.util.Scanner;
public class Test06{
	
	public static void main(String[] args){
		/**
			知识点:逻辑运算符的案例
			
			在dos窗口输入一个数字,判断是否在50~100的区间内
		*/
		
		//1.输入一个int数字
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入一个int值:");
		int num = scan.nextInt();
		
		//2.判断是否在50~100的区间内
		boolean bool = num>50 && num<100;
		
		//3.输出结果
		System.out.println("该值是否在50~100的区间内:" + bool);
		
	}
}

2、Scanner类的使用

Scanner类是Java给我们提供的一个类,这个类的功能就是在控制台输入数据

//导包
import java.util.Scanner;

public class Test07{
	
	public static void main(String[] args){
		/**
			知识点:Scanner类的使用
			
			含义:Java给我们提供的一个类,这个类的功能就是在控制台输入数据
		*/
		
		//创建Scanner类的对象
		//人类	李冬 = new 人类();
		Scanner scan = new Scanner(System.in);
		
		//调用功能
		int i1 = scan.nextInt();//在控制台输入一个int数据
		int i2 = scan.nextInt();//在控制台输入一个int数据
		double d = scan.nextDouble();//在控制台输入一个double数据
		String str = scan.next();//在控制台输入一个String数据
		
	}
}

3、字符串拼接符(+)

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

public class Test08{
	
	public static void main(String[] args){
		/**
			知识点:字符串拼接符 +
			
			+两侧都是数值,此符号为算术运算符
			+有一侧或者两侧是字符串,此符号为字符串拼接符
		*/
		
		System.out.println(1+2+"abc" + "def" +1+2);//3abcdeef12
		//				    3 +"abc" + "def" +1+2
		//					"3abc"	 + "def" +1+2
		//					"3abcdef"		 +1+2
		//					"3abcdef1"		   +2
		//					"3abcdef12"
		
	}
}

四、三目运算符

  	知识点:三目运算符/三元运算符
  	
  	语法:
  		数据类型 变量 = (表达式)?值1:值2;
  		
  	理解:
  		表达式的结果必须是boolean类型
  		true - 将值1赋值给变量
  		false- 将值2赋值给变量

1、案例一

在控制台输入两个int类型的数字,输出最大值

import java.util.Scanner;
public class Test09{
	
	public static void main(String[] args){
		
			知识点:表达式
			5+6:算数表达式
			5>6:关系表达式
			true & false:逻辑表达式

				
			做实验:
				int num = (false)?10:20;
				System.out.println(num);
			
			案例1:在控制台输入两个int类型的数字,输出最大值
				//创建Scanner类的对象scan
				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类型的数字,输出最小值

import java.util.Scanner;
public class Test09{
	
	public static void main(String[] args){
				
			案例2:在控制台输入两个int类型的数字,输出最小值
				//创建Scanner类的对象scan
				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;//判断a是否大于b,如果小于就返回a,否则返回b
				
				//输出最大值
				System.out.println("最小值为:" + min);

	}
}

3、案例三

在控制台输入三个int类型的数字,输出最大值

import java.util.Scanner;
public class Test09{
	
	public static void main(String[] args){
		
			案例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;
				
				System.out.println("最大值为:" + max);
	}
}

4、案例四

在控制台输入三个int类型的数字,由小到大输出

import java.util.Scanner;
public class Test09{
	
	public static void main(String[] args){
				
			案例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);

	}
}

五、深入三目运算符

三目运算符返回值规则:
1.值1和值2是常量的情况,就会按照取值范围大的类型返回数据
2.值1和值2是变量的情况,就会按照取值范围大的类型返回数据
3.值1是常量,值2是变量的情况,值1是否在值2所属类型的取值范围里
在,就按照值2类型返回数据
不在,就按照值1类型返回数据

扩展面试题

public class Test10{
	
	public static void main(String[] args){
			
			知识点:深入三目运算符
			
			扩展面试题1int a = 5;
				System.out.println((a<5)?10.9:9);//9.0
				
			扩展面试题2char x = 'x';//'x' - ASCII - 120
				int i = 10;
				System.out.println(false?i:x);//120
				
			扩展面试题3char x = 'x';//'x' - ASCII - 120
				System.out.println(false?100:x);//x
				System.out.println(false?65536:x);//120			
	}
}

六、位运算符(二进制)

含义:将十进制的数据转换为二进制再进行运算

  	&与 |或 ^异或
  	<< 左移
  	 >> 右移
  	>>>无符号位右移
public class Test11{
	
	public static void main(String[] args){
		
			含义:将十进制的数据转换为二进制再进行运算
			
			//&:同位比较,两者为1,结果才为1
			byte b1 = 23;//0001,0111
			byte b2 = 25;//0001,1001
						 //0001,0001
			//23 byte - 0001,0111
			//23 int  - 0000,0000,0000,0000,0000,0000,0001,0111
			//25 byte - 0001,1001
			//25 int  - 0000,0000,0000,0000,0000,0000,0001,1001
			//17 int  - 0000,0000,0000,0000,0000,0000,0001,0001
			//17 byte - 0001,0001
			byte result = (byte)(b1 & b2);
			System.out.println(result);//17 - 0001,0001
			
			//|:同位比较,两者有1,结果就为1
			byte b1 = 23;//0001,0111
			byte b2 = 25;//0001,1001
						 //0001,1111
			System.out.println(b1 | b2);//31 - 0001,1111
			
			//^:同位比较,两者相同为0,不同为1
			byte b1 = 23;//0001,0111
			byte b2 = 25;//0001,1001
						 //0000,1110
			System.out.println(b1 ^ b2);//14 - 0000,1110
			
			&|^:前后两者都是数值,该符号为位运算符
			&|^:前后两者都是boolean值,该符号为逻辑运算符
			
			//<<:整体向左移动n位,就用n个0补位
			byte b1 = 10;//0000,1010
			//10 byte:0000,1010
			//10  int:0000,0000,0000,0000,0000,0000,0000,1010
			//40  int:0000,0000,0000,0000,0000,0000,0010,1000
			System.out.println(b1 << 2);
			
			//>>:整体向右移动n位,就用n个最高位补位
			byte b1 = 10;//0000,1010
			//10 byte:0000,1010
			//10  int:0000,0000,0000,0000,0000,0000,0000,1010
			//2		 :0000,0000,0000,0000,0000,0000,0000,0010
			System.out.println(b1 >> 2);
			
			byte b2 = -10;//1111,0110
			//-10 byte:1111,0110
			//-10  int:1111,1111,1111,1111,1111,1111,1111,0110
			//-3 	  :1111,1111,1111,1111,1111,1111,1111,1101
			System.out.println(b2 >> 2);
			
			//>>>:整体向右移动n位,就用n个0补位
			byte b1 = 10;//0000,1010
			//10 byte:0000,1010
			//10  int:0000,0000,0000,0000,0000,0000,0000,1010
			//2		 :0000,0000,0000,0000,0000,0000,0000,0010
			System.out.println(b1 >>> 2);
			
			byte b2 = -10;//1111,0110
			//-10 byte:1111,0110
			//-10  int:1111,1111,1111,1111,1111,1111,1111,0110
			//1073741821:0011,1111,1111,1111,1111,1111,1111,1101
			System.out.println(b2 >>> 2);
			
			//注意:>> 和 >>> 如果是操作整数,效果是一样的
	
	}
}

1、经典面试题

1、使用最有效率的方式计算2*8

public class Test11{
	
	public static void main(String[] args){
			
			经典面试题1:使用最有效率的方式计算2*8
				System.out.println(2<<3);

	}
}

2、描述下列代码的输出结果

public class Test11{
	
	public static void main(String[] args){

			经典面试题2:描述下列代码的输出结果
				//-1 int:1111,1111,1111,1111,1111,1111,1111,1111
				//(byte):1111,1111
				//(char):1111,1111,1111,1111 -- char类型向上转型用0补位
				//(int) :0000,0000,0000,0000,1111,1111,1111,1111
				System.out.println((int)(char)(byte)-1);//65535
				
			知识点:运算符的优先级别
			经验:不用记,灵活运用小括号
	}
}

七、转义字符及常量

1、转义字符

含义:具有特殊意义的字符本身
\n:表示换行
":表示一个双引号
':表示一个单引号
\:表示一个斜杠
\t:表示水平制表

2、常量

含义:在程序执行过程中不可变的量
分类:
1.数字字面量(ps:69、100、200)
2.字面值常量(ps:“三上悠亚”,“深田咏美”)
3.final(最终的)修饰的变量

字面值常量和final(最终的)修饰的变量:存储在常量池中,直到项目结束才会被销毁

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值