Java运算符的使用与深入

一、算术运算符的使用

public class Test04{
	/**
		知识点:算数运算符的使用
		符号:+、-、*、/、%、++、--
		
		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
		
		//++:自增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
	*/
	public static void main(String[] args){

	}
	
}

二、算术运算符的深入

public class Test06{
	/**
		知识点:算数运算符的深入 -- 面试题
		符号:+、-、*、/、%、++、--
		
		经典面试题一:输出结果为?
			int a = 8;
			int b = (a++)+(++a)+(a*10);
			//a = 10
			//b = 8 + 10 + 100
			System.out.println(b);//118
			
		经典面试题二:输出结果为?
			int i = 0;   
			//底层原理:
			//i = (int)(i+1);
			//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++; 
			System.out.println(i);//0
	*/
	public static void main(String[] args){
	
		
	}
	
}

三、赋值运算符

public class Test07{
	/**
		知识点:赋值运算符
		符号:=、+=、-=、*=、/=、%=
		
		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
		
		经典面试题一:输出结果为?
			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;//不会报错
			
		赋值规则:
					 s   += 1				 s  = (short)((s)   +   (1))
			复合赋值 E1 op= E2等价于简单赋值 E1 = (T)((E1) op 	(E2)),其中T是E1的类型。
	*/
	public static void main(String[] args){
		
	
	}
	
}

四、关系运算符

public class Test08{
	/**
		知识点:关系运算符
		符号:==、!=、>、>=、<、<=
		
		小结:
			关系运算符的结果都是boolean值
			=为赋值号,将赋值号右边的数据赋值给左边的变量,他是赋值运算符
			==表示判断两个值是否相同,他是关系运算符
			!=表示判断两个值是否不相同,感叹号是英文
			
		boolean bool = 10 == 5;
		System.out.println(bool);//false
		System.out.println(10 != 5);//true
		System.out.println(10 >  5);//true
		System.out.println(10 >= 5);//true
		System.out.println(10 <  5);//false
		System.out.println(10 <= 5);//false
		
		//经典面试题一:输出结果为?
			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		
	*/
	public static void main(String[] args){
	
	}
	
}

五、字符串拼接符

  1. 符号:+

  2. 注意:

​ a.+两侧都是数值,此符号为算术运算符

​ b.+一侧或两侧有字符串,此符号为字符串拼接符

public class MyTest01{
	
	public static void main(String[] args){
		
		System.out.println(1 + 2 + "def" + "abc" + 1 + 2);
  		//                   3 +   "def"   "abc" +1 +2
		//                        "3def"+ "abc" + 1 + 2
		//                            "3defabc" + 1 + 2
		//                                 "3defabc12"
	}
}

六、逻辑运算符

  1. 符号:
符号&&&|||^!
含义短路与短路或异或
  1. 符号深入
    2.1 &与:前后两侧必须接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

2.2 &&短路与:前后两侧必须都接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

​ 2.3 & VS &&
​ &:判断前者为false后,还会判断后者
​ &&:判断前者为false后,不会判断后者,效率更高

	System.out.println(false &10/0>3);//ArithmeticException-算数异常
	System.out.println(false && 10/0>3);//false

​ 2.4|或:前后两侧都必须接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

​ 2.5 ^异或:前后两侧必须都接boolean,两侧不同为true,两侧相同为false

	System.out.println(true ^ true);//false
	System.out.println(true ^ false);//true
	System.out.println(false ^ true);//true
	System.out.println(false ^ false);//false

​ 2.6 !非:取反/置反

	boolean bool1 = true;
 System.out.println(!bool1);//false
	boolean bool2 = false;
	System.out.println(!bool2);//true
  1. 注意:

​ &、&&、|、||、^前后两侧都是接boolean

​ !非,不要用中文输入法输入感叹号

  1. 练习题:在dos窗口输入一个数字,判断是否在50~100的区间内
import java.util.Scanner;
public class MyTest07{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个数字");
        int a = scan.nextInt();
        boolean result = a>50 &&a<100;
        System.out.println("该数字是否在50~100以内"+result);
          
    }
}

七、三目运算符的使用和深入

  1. 语法规则:变量 = (表达式)?值1:值2;

    理解:表达式的结果必须是Boolean类型

    ​ true - 将值1赋值给变量

    ​ false - 将值2赋值给变量

    ​ eg:

    ​ int num = (false)? 10:20;

    ​ System.out.println(num);//20

  2. 应用

    2.1 需求1:在控制台输入两个int值,输出最大值

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

​ 2.2 需求2:在控制台输入三个int值,输出最大值

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

​ 2.3 需求3:在控制台输入三个int值,由小到大输出(xx<xx<xx)

import java.util.Scanner;
public class MyTest05{
	
	public static void main(String[] args){
		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-min-max;
		System.out.println(min+"<"+mid+"<"+max);
	}
	
}

3 面试题

​ 3.1扩展面试题1

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

​ 3.2扩展面试题2

​ char x = ‘x’;//‘x’-字符编码-120

​ int i = 100;

​ System.out.println((false)?i:x);//120

​ 3.3扩展面试题3:

​ char x = ‘x’;

​ System.out.println((false)?100:x);//x

​ System.out.println((false)?100000:x);//120

​ 返回值规则:

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

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

​ 值1和值2一个是变量一个是常量的情况,判断常量是否在变量所属类型的取值范围内

​ 在–按照变量类型返回数据

​ 不在–按照常量类型返回数据

八、位运算符

  1. 符号:&、|、^、<<、>>、>>>

  2. 理解:将十进制的数据转换为二进制再做运算

  3. 位运算符深入

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

​ eg1:

public class MyTest04{
	public static void main(String[] args){
		byte b1 = 19;//0001 0011
		byte b2 = 25;//0001 1001
        			 //0001 0001
		System.out.println(b1 & b2);//17
	}
}

​ eg2:byte类型的数据在做运算时会向上转型为int类型的数值,所以必须强制转换

public class MyTest04{
	public static void main(String[] args){
		byte b1 = 19;//0001 0011
		byte b2 = 25;//0001 1001
		byte result = b1 & b2; 
		System.out.println(result);
		
	}
}//报错
public class MyTest04{
	public static void main(String[] args){
	
		byte b1 = 19;//0001,0011
		byte b2 = 25;//0001,1001
					 //0001,0001
		//b1 - byte:0001,0011
		//		int:0000,0000,0000,0000,0000,0000,0001,0011
		//b2 - byte:0001,1001
		//		int:0000,0000,0000,0000,0000,0000,0001,1001
		//	   结果: 0000,0000,0000,0000,0000,0000,0001,0001
		//	   byte:0001,0001
		byte result = (byte)(b1 & b2);
		System.out.println(result);//17
		
	}
}

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

public class MyTest04{
	public static void main(String[] args){
	
		int a = 19;//0000,0000,0000,0000,0000,0000,0001,0011
		int b = 25;//0000,0000,0000,0000,0000,0000,0001,1001
		           //0000,0000,0000,0000,0000,0000,0001,1011
		System.out.println(a|b);//27
			
	}
}

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

public class MyTest04{
	public static void main(String[] args){
       
		int a = 19;//0000,0000,0000,0000,0000,0000,0001,0011
		int b = 25;//0000,0000,0000,0000,0000,0000,0001,1001
				   //0000,0000,0000,0000,0000,0000,0000,1010
		System.out.println(a ^ b);//10
			
	}
}

​ 3.4 <<左移:整体向左移动n位,就用n个0补到最低位

​ 注意:左移1位相当于乘以2

public class MyTest04{
	public static void main(String[] args){
		int c = 128;//0000,0000,0000,0000,0000,0000,1000,0000
		System.out.println(c<<2);//512
					//0000,0000,0000,0000,0000,0010,0000,0000
			
	}
}

​ 3.5 >>右移:整体向右移动n位,就用n个符号位补到最高位,正数高位步0,负数高位补1

​ 注意:右移1位相当于除以2

public class MyTest04{
	public static void main(String[] args){
	
	int a = 128;//0000,0000,0000,0000,0000,0000,1000,0000
					//0000,0000,0000,0000,0000,0000,0010,0000
		System.out.println(a >> 2);//32
		
		int b = -128;//补码:1111,1111,1111,1111,1111,1111,1000,0000
					 //补码:1111,1111,1111,1111,1111,1111,1110,0000
		System.out.println(b >> 2);//-32	
	}
}

​ 3.6 >>>无符号位右移
​ 注意:无符号位右移和右移在处理正数的情况下没有区别,都是高位补0

public class MyTest04{
	public static void main(String[] args){
	int c = 128;//0000,0000,0000,0000,0000,0000,1000,0000
					0000,0000,0000,0000,0000,0000,0010,0000
		System.out.println(c >>> 2);//32	
		int d = -128;//1111,1111,1111,1111,1111,1111,1000,0000
				 //0011,1111,1111,1111,1111,1111,1110,0000
		System.out.println(d >>> 2);//1073741792	
	}
}

九、表达式

5+6 ->算数表达式

5>6 ->关系表达式


  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值