4、 运算符

JAVA 除法 浮点数_java


4.1 算术运算符

JAVA 除法 浮点数_JAVA 除法 浮点数_02


JAVA 除法 浮点数_java_03


1、除法运算时,整型与整型相除,结果仍然是整型,不论你将结果赋值给一个 int 类型还是一个 double 类型,若想算出浮点型,必须在进行除法运算时,将除数和被除数中的一个变为浮点型参与运算。

2、结果的符号与被模数的符号相同。

3、自增一和自减一不会改变数据本身的数据类型。

/*
运算符之一:
算数运算符:+ - * / %(取余) (前)++ (后)++ (前)-- (后)-- +(连接运算)
*/
class AriTest 
{
	public static void main(String[] args) 
	{
		//除号:/
		int num1 = 12;
		int num2 = 5;
		int result = num1 / num2;						//2
		double result1 = (double)num1 / num2;			//2.4000000953674316
		double result2 = (num1 +0.0) / num2;			//2.4

		System.out.println(result);						//结果保留整型
		System.out.println(result1);
		System.out.println(result2);

		//取余运算:%
		//结果的符号与被模数的结果相同。
		int m1 = 12;
		int n1 = 7;
		System.out.println("m1 % n1 = " + m1 % n1);		//5

		int m2 = -12;
		int n2 = 7;
		System.out.println("m2 % n2 = " + m2 % n2);		//-5

		int m3 = 12;
		int n3 = -7;
		System.out.println("m3 % n3 = " + m3 % n3);		//5

		int m4 = -12;
		int n4 = -7;
		System.out.println("m4 % n4 = " + m4 % n4);		//-5
	
		//(前)++,先自增1,然后再赋值
		//(后)++,先赋值,再自增1
		//自增1不会改变本身变量的数据类型。

		byte b1 = 127;
		b1++;
		System.out.println(b1);							//-128,通过计算机底层的补码运算可以知道,0111,1111 --> 1000,0000
 		//(前)--,先自减1,后运算
		//(后)--,先运算,后自减1

	}
}

JAVA 除法 浮点数_java_04


JAVA 除法 浮点数_java_05

/*
随意给出一个整数,打印显示它的个位数,十位数,百位数的值。
格式如下:
数字xxx的情况如下:
个位数:
十位数:
百位数:

例如:
数字153的情况如下:
个位数:3
十位数:5
百位数:1
*/
class AriExer 
{
	public static void main(String[] args) 
	{
		int num = 187;
		int bai = num / 100;
		int shi = num % 100 /10;
		int ge = num % 10;

		System.out.println("个位数:" + bai);
		System.out.println("十位数:" + shi);
		System.out.println("百位数:" + ge);
	}
}

运行结果如下:

D:\MyDownloads\JAVA\my_java_code\day03>java AriExer
个位数:1
十位数:8
百位数:7

4.2 赋值运算符

JAVA 除法 浮点数_java_06


JAVA 除法 浮点数_System_07


*1、+= 、 -= 、 =、 /= 、%=不会改变数据本身的数据类型。

2、在数据类型为整型的情况下,num +=2 其实等价于 num = num + 2。

3、开发中,如果希望实现变量+1的操作,有几种方法?(前提:int num = 10)

方式一: num = num + 1;

方式二: num += 1; (超过1推荐方式二,不会改变数据类型)

方式三: num++; (只自增1推荐方式三)

/*
运算符之二:
赋值运算符:= += -= *= /= %=
*/
class SetValueTest
{
	public static void main(String[] args) 
	{
		int num1 = 10;
		num1 += 2;							//num1 = num1 +2;
		System.out.println(num1);

		int num2 = 12;
		num2 %= 5;							//num1 = num1 +2;
		System.out.println(num2);

		short num3 = 12;
		//num3 = num3 +2;					//编译不通过
		num3 += num3;						//不会改变数据本身的数据类型
		System.out.println(num3);

		//开发中,如果希望实现变量+1的操作,有几种方法?(前提:int num = 10)
		//方式一:num = num + 1;
		//方式二:num += 1;		(超过1推荐方式二,不会改变数据类型)
		//方式三:num++;		(只自增1推荐方式三)

		//思考3
		int m = 2;
		int n = 3;
		n *= m++; 
		System.out.println("m=" + m);
		System.out.println("n=" + n);

		//思考4
		int num4 = 10;
		num4 += (num4++) + (++num4);		//n = n + (n++) + (++n)= 10(n=10) + 10(n=11) + 12 (n=12);
		System.out.println(num4);
	}
}

运行结果如下:

D:\MyDownloads\JAVA\my_java_code\day03>java SetValueTest
12
2
24
m=3
n=6
32

4.3 比较运算符

JAVA 除法 浮点数_JAVA 除法 浮点数_08


1、> < >= <= :只能使用在数值类型的数据之间。

2、== 和 !=:不仅可以使用在数值类型数据之间,还可以使用在其他引用类型变量之间。

JAVA 除法 浮点数_运算符_09

/*
运算符之三:
比较运算符:==  !=  <  >  <=  >=

结论:
1. 比较运算符的结果是布尔型,boolean型,
2. 区分 = 和 ==
*/
class CompareTest 
{
	public static void main(String[] args) 
	{
		int i = 10,j=20;
		System.out.println(i == j);		//fause
		System.out.println(i = j);		//20,先将j赋值给i然后输出i

		boolean b1 = true, b2 = false;
		System.out.println(b1 == b2);	//fause
		System.out.println(b1 = b2);	//fause
	}
}

运行结果如下:

D:\MyDownloads\JAVA\my_java_code\day03>java CompareTest
false
20
false
false

D:\MyDownloads\JAVA\my_java_code\day03>

4.4 逻辑运算符

JAVA 除法 浮点数_System_10


JAVA 除法 浮点数_JAVA 除法 浮点数_11


1、逻辑运算符操作的是布尔型的变量,位运算符操作的是整型变量。

2、区分 & 与 &&(开发推荐使用短路与,可以提高运行效率)

相同点: 两种运算结果相同;当符号左边是true时,都会执行符号右边运算

不同点: 当符号左边为false时,&执行右边运算,&&不执行右边运算。

3、区分 | 和 ||(开发中推荐使用短路或

相同点: 运算结果相同,运算符左边为false时右边都要参与运算

不同点: 运算符左边为true时,||右边的不参与运算

JAVA 除法 浮点数_运算符_12


JAVA 除法 浮点数_java_13

/*
运算符之四:
逻辑运算符:&  && |  ||  !  ^

说明:
1.逻辑运算符都是操作布尔型的变量。
2.
*/
class LogicTest 
{
	public static void main(String[] args) 
	{
		//区分 & 与 &&(开发推荐使用短路与)
		//相同点:两种运算结果相同;当符号左边是true时,都会执行符号右边运算
		//不同点:当符号左边为false时,&执行右边运算,&&不执行右边运算。
		boolean b1 = true;
		b1 = false;
		int num1 = 10;
		if (b1 & (num1 ++ >0))
		{
			System.out.println("我现在在北京");
		}else{
			System.out.println("我现在在南京");
		}
		System.out.println("num1 = "+ num1);


		boolean b2 = true;
		b2 = false;
		int num2 = 10;
		if (b1 && (num2 ++ >0))
		{
			System.out.println("我现在在北京");
		}else{
			System.out.println("我现在在南京");
		}
		System.out.println("num2 = "+ num2);

		//区分 | 和 ||(开发中推荐使用短路或)
		//相同点:运算结果相同,运算符左边为false时右边都要参与运算
		//不同点:运算符左边为true时,||右边的不参与运算

	}
}
D:\MyDownloads\JAVA\my_java_code\day03>java LogicTest
我现在在南京
num1 = 11
我现在在南京
num2 = 10

4.5 位运算符(了解)

JAVA 除法 浮点数_System_14


JAVA 除法 浮点数_System_15


1、左移空位都补零,右移正数高位全补0,负数高位全补1。

2、<<:在一定范围内,每向左移一位,相当于在原数字基础上 * 2

>>:在一定范围内,每向右移一位,相当于在原数字基础上 / 2

3、面试题:最高效的计算 2 * 8? 2<<3 8<1 移位比加法效率更高

/*
运算符之五:位运算符(了解)
1、位运算符操作的都是整型的数据
2、<<:在一定范围内,每向左移一位,相当于在原数字基础上 * 2
   >>:在一定范围内,每向右移一位,相当于在原数字基础上 / 2
3、左移右边补0
   右移左边补位,正数补0,负数补1

面试题:最高效的计算 2 * 8?   2<<3    8<1    移位比加法效率更高
*/

class BitTest 
{
	public static void main(String[] args) 
	{
		int i = 21;


		System.out.println("i << 2 :" + (i<<2));
		System.out.println("i << 27 :" + (i<<27));

		//练习:交换两个变量的值
		int num1 = 10;
		int num2 = 20;
		System.out.println("num1 = " + num1 +", num2 = " + num2);

		
		//方式一:定义一个临时变量,然后 num1--》temp ,num2 --》num1,temp --》num2
//		int temp;
//		temp = num1;
//		num1 = num2;
//		num2 = temp;
//		System.out.println("num1 = " + num1 +", num2 = " + num2);

		//方式二:不用定义临时变量,节省内存空间
		//弊端:① 相加超出存储范围,② 有局限性:只能适用于数值类型
//		num1 = num1 + num2;
//		num2 = num1 - num2;
//		num1 = num1 - num2;

		//方式三:位运算
		num1 = num1 ^ num2;
		num2 = num1 ^ num2;
		num1 = num1 ^ num2;

		System.out.println("num1 = " + num1 +", num2 = " + num2);
	}
}
D:\MyDownloads\JAVA\my_java_code\day03>java BitTest
i << 2 :84
i << 27 :-1476395008
num1 = 10, num2 = 20
num1 = 20, num2 = 10

4.6 三元运算符

JAVA 除法 浮点数_java_16


1、结构: (条件表达式)?表达式1:表达式2;

2、 条件结果的表达式为boolean类型,根据表达式的结构执行表达式1 或者表达式 2,表达式1和表达式2必须可以统一为一个类型的,三元运算符可以嵌套使用,但是在不能提高运行效率的情况下不建议嵌套使用,会降低可读性。

3、凡是可以使用三元运算符的都可以使用 if-else 流程控制语句改写,反之不成立。

4、如果程序既可以使用三元运算符又可以使用if-else,优先使用三元运算符,原因:简洁,运行效率高

class SanYuanTest 
{
	public static void main(String[] args) 
	{
		//获取两个数中的最大值
		int m = 12,n=5;
		int max = (m > n)? m:n;
		System.out.println("max = " + max);


		double min = (m > n)? 2:1.0;
		System.out.println("min = " + min);

		int n1 = 10,n2 = 20,n3 = 30;
		int max1 = (n1 > n2)? n1 : n2;
		int max2 = (max1 > n3)? max1 : n3;
		System.out.println("三个数中的最大数为:" + max2);

		//在没有提高程序运行效率的情况下,不建议这样写。
		//int max3 = (((n1 > n2)? n1 : n2) > n3)? ((n1 > n2)? n1 : n2) : n3;
		//System.out.println("三个数中的最大数为:" + max3);
	}
}
D:\MyDownloads\JAVA\my_java_code\day03>java SanYuanTest
max = 12
min = 2.0
三个数中的最大数为:30

JAVA 除法 浮点数_运算符_17


注:一般使用 ()手动提升运算优先级,不必死记硬背运算符优先级。