JAVA基础 - U4运算符 - 运算符

运算符介绍

运算、赋值、比较

  • 算术运算符
  • 赋值运算符
  • 关系运算符[比较运算符]
  • 逻辑运算符
  • 位运算符[需要二进制基础]
  • 三元运算符

算术运算符

在这里插入图片描述

  • / % ++ 运算( a % b = a - a / b * b,//a % b 当a为小数时,公式 = a - (int)a / b * b)
public class ArithmeticOperation{

	public static void main(String[] args) {

		// /使用,注意前后数据类型
		System.out.println(10 / 4); 	//从数学看是2.5,但是这里10和4都是int,所以结果也是int
										//结果是2
		double d = 10 / 4;	//因为10/4等于2,这里再对2取double,所以是2.0
		System.out.println(d);	//2.0

		// %使用,取模,取余
		// %的本质:a % b = a - a / b * b **********************
		System.out.println(10 % 3);		//1
		System.out.println(-10 % 3);	//-1
		System.out.println(10 % -3);	//1
		System.out.println(-10 % -3);	//-1
        //a % b 当a为小数时,公式 = a - (int)a / b * b
        System.out.println(-10.5 % 3);//-1.5 (int)(-10.5) = -10

		// ++使用
		//作为独立语句使用,前++和后++都等价于 i = i + 1
		int i = 10;
		i++;//自增,等价于 i = i + 1;
		System.out.println(i);//11
		++i;//自增,等价于 i = i + 1;
		System.out.println(i);//12
		//作为表达式使用
		//前++:++i 先自增后赋值
		//后++:i++ 先赋值后自增
		int j = 8;
		int k = ++j;//j = j + 1;k = j;
		System.out.println("j = " + j + ";" + "k = " + k);//j = 9;k = 9;
		int p = 8;
		int q = p++;//q = p ; p = p + 1;
		System.out.println("p = " + p + ";" + "q = " + q);//p = 9;q=8;


	}

}
D:\Junior\java\JavaCode\Chapter04>javac ArithmeticOperation.java

D:\Junior\java\JavaCode\Chapter04>java ArithmeticOperation
2
2.0
1
-1
1
-1
11
12
j = 9;k = 9
p = 9;q = 8
例题
  1. int i = 1;i = i++;System.out.println(i);请问输出结果是多少?
答案是1.
int i = 1;
i = i++;//会使用临时变量*********
		//(1)temp = i;(2)i = i + 1;(3)i = temp;
System.out.println(i);//1
  1. int i = 1;i = ++i;System.out.println(i);请问输出结果是多少?
答案是2.
int i = 1;
i = i++;//会使用临时变量*********
		//(1)i = i + 1;(2)temp = i;(3)i = temp;
System.out.println(i);//2
  1. 假如还有59天放假,问:合xx个星期零xx天?
  2. 定义一个变量保存华氏温度,华氏温度转换摄氏温度公式为:5 / 9 * (华氏温度 - 100),请求出华氏温度对应的摄氏温度[234.5]
public class ArithmeticOperationExercise02{

	public static void main(String[] args){

		//3.假如还有59天放假,问:合xx个星期零xx天?
		int days = 59;
		int w = days / 7;
		int d = days % 7;
		System.out.println("合" + w + "个星期,零" + d + "天");

		// 4.定义一个变量保存华氏温度,
		// 华氏温度转换摄氏温度公式为:5 / 9 * (华氏温度 - 100),
		// 请求出华氏温度对应的摄氏温度[234.5]
		double hs = 234.5;
		double ss = 5.0 / 9.0 * (hs - 100.0);//注意考虑数学公式和java数据类型的特性
		System.out.println("华氏温度234.5度对应的摄氏温度为" + ss + "度");


	}
}
合8个星期,零3天
华氏温度234.5度对应的摄氏温度为74.72222222222223度

关系运算符(比较运算符)

在这里插入图片描述


逻辑运算符

在这里插入图片描述

  • 短路与 &&,短路或 ||,取反 !
  • 逻辑与 &,逻辑或 |,逻辑异或^(当a和b不同时,记结果为true,否则为false)
短路与&&和逻辑与&的区别:
  1. &&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
  2. &逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
  3. 开发中,使用的基本是短路与&&,效率高
int a = 4;
int b = 9;
//&&短路与:如果第一个条件为false,则第二个条件不会判断,最终结果为false,效率高
if(a < 1 && ++b < 50){
    System.out.println("短路与执行");//不会执行
}
System.out.println("a = " + a + " b = " + b);//a = 4 b = 9,短路与后面的++b没有执行

//&逻辑与:不管第一个条件是否为false,第二个条件都要判断,效率低
if(a < 1 & ++b < 50){
    System.out.println("逻辑与执行");//不会执行
}
System.out.println("a = " + a + " b = " + b);//a = 4 b = 10,逻辑与后面的++b执行
短路或||和短路与|的区别:
  1. ||短路或:如果第一个条件为true,则第二个条件不会判断,最终结果为true,效率高(同上面大意一样,&&换成||即可)
  2. |逻辑或:不管第一个条件是否为true,第二个条件都要判断,效率低
  3. 开发中,使用的基本是短路或||,效率高
逻辑异或
boolean a = (10 > 1) ^(3 < 5);//T ^ T
boolean b = (10 < 1) ^(3 < 5);//F ^ T
System.out.println("a = " + a + " b = " + b);//a = false b = true
逻辑运算符练习

eg1.

//逻辑与
int x = 5;
int y = 5;
if(x++==6 & ++y==6){//x++==6,x先赋值比较,再自增。所以F-->x=6-->y=6-->T,F&T-->F
	x = 11;
}
System.out.println("x = " + x + " y = " + y);//x = 6 y = 6
//短路与
int x = 5;
int y = 5;
if(x++==6 && ++y==6){//x++==6,x先赋值比较,再自增。所以F-->x=6结束
	x = 11;
}
System.out.println("x = " + x + " y = " + y);//x = 6 y = 5
//逻辑或
int x = 5;
int y = 5;
if(x++==5 | ++y==5){//x++==5,x先赋值比较,再自增。所以T-->x=6-->y=6-->F,T|F-->T
	x = 11;//X=11
}
System.out.println("x = " + x + " y = " + y);//x = 11 y = 6
//短路或
int x = 5;
int y = 5;
if(x++==5 || ++y==5){//x++==5,x先赋值比较,再自增。所以T-->x=6结束
	x = 11;//x=11
}
System.out.println("x = " + x + " y = " + y);//x = 11 y = 5

eg2.

boolean x = true;
boolean y = false;
short z = 46;
if((z++==46) && (y = true)) z++;//T-->z=47-->y被赋值了true-->T,T&&T-->T,z-->48
if((x = false) || (++z==49)) z++;//x被赋值了false-->F-->z=49,z==49-->T,F||T-->T,z=50
System.out.println("z = " + z);//z=50

赋值运算符

赋值运算符就是将某个运算后的值,赋给指定的变量

  • 基本赋值运算符 =
  • 复合运算符
    • += -= *= /= %=
    • eg. a += b;//等价于 a = a + b
    • 复合运算符会进行类型转换 eg.byte b = 3; b += 2;//2是int,+=会自动将2进行类型转换,可理解为b = (byte)(b + 2)。而b = b + 2则不行,因为左边的b也是byte

三元运算符
  • 条件表达式 ? 表达式1 : 表达式2;
  • 如果条件表达式为true,运算结果是表达式1
  • 如果条件表达式为false,运算结果是表达式2
    • 表达式1和表达式2要为可以赋给接受变量的类型(或可以自动转换的类型/加括号直接转换)
int a = 10;
int b = 99;
int result = a > b ? a++ : b--; //result = b--;
System.out.println( "result = " +  result ); //result = 99
三元运算符练习

eg1.实现三个数的最大值

public class TernaryOperatorExercise{

	public static void main(String[] args){
		//实现三个数的最大值
		int n1 = 55;
		int n2 = 33;
		int n3 = 123;
		int max1 = n1 > n2 ? n1 : n2;
		int max2 = max1 > n3 ? max1 : n3;
		System.out.println("三个数中的最大值为 " + max2);//123
		
        //一条语句实现.清晰度不及上面的方法
		int max3 = (n1 > n2 ? n1 : n2) > n3 ? (n1 > n2 ? n1 : n2) : n3;
		System.out.println("三个数中的最大值为 " + max3);//123
	}
}

运算符优先级
  • 优先级代表的是表达式运算中的运算顺序。(下表中优先级从上到下,从高到低)
  • 只有单目运算符、赋值运算符是从右往左运算的
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值