天天看点

java_Day 02:算术运算符

这里是引用

算术运算符

1一元运算符(只需要一个操作数)

1.1 自加运算

i++:表示:先运算后赋值

++i:表示:先赋值后运算

例如:

int i = 5;
		sum = i++;//先计算,后赋值
		System.out.println(sum+" "+i)//输出5 6
		
		int i = 5;
		sum = ++i;//先赋值,后计算
		System.out.println(sum+" "+i)//输出6 6
           
1.2 自减运算

i–:表示:先运算后赋值

–i:表示:先赋值后运算

例如:

int i = 5;
		sum = i--;//先计算,后赋值
		System.out.println(sum+" "+i)//输出5 4
		
		int i = 5;
		sum = --i;//先赋值,后计算
		System.out.println(sum+" "+i)//输出4 4
           
**一元运算符:**
	!逻辑非(取反)
	!运算特点:
		!true = false;
		!false = true;
           

2二元运算符(需要二个操作数)

** + - * / % **

加法运算:

*

* + **

减法运算:** - **

乘法法运算:** * **

除法运算:** /**

模运算(取余运算):** % **

例如:

int i = 5,j = 4
		sum = i + j;
		System.out.println(sum)//输出9
		sum = i - j;
		System.out.println(sum)//输出1
		sum = i * j;
		System.out.println(sum)//输出20
		sum = i / j;
		System.out.println(sum)//输出1  5对4取商
		sum = i % j;
		System.out.println(sum)//输出1  5对4取余
           

** 随堂练习:**

要求:

1)获取整数987的百位数、十位数和个位数。

//求一个数的个,十,百,三位数
		int num = 699;
		int ge,shi,bai;
		ge = num % 10;
		shi = num/10%10;
		bai = num/100;
		System.out.println(ge+" "+shi+" "+bai);//输出9 9 6
           

2)判断一个数是奇数还是偶数;

//判断奇偶	
		System.out.print("请输入一个数:");
		Scanner input = new Scanner(System.in);
		int num = input.nextInt();
		if(num == 0)
		{
			System.out.println("既不是奇数也不是偶数");
		}
		else if(num % 2 == 0)
		{
			System.out.println("偶数");
		}
		else
		{
			System.out.println("奇数");
		}
           

3)int a = 3, b = 4; 求a++ / 3 + --b * 2 - a-- % 6 + b++ * 3 - ++b的值。

//计算过程:
		/*
		a:3
		b:5
		sum:3/3+3*2-4%6+3*3-5=1+6-4+9-5=7
		*/
		int a = 3, b = 4,sum; 
		sum=a++ / 3 + --b * 2 - a-- % 6 + b++ * 3 - ++b;
		System.out.println("a:"+a+"b:"+b+"sum:"+sum);//输出a:3 b:5 sum:7
           

3 赋值运算

3.1 = 把等号右边的值赋值给左边
** 随堂练习 **

要求:

交换两个数的值,三种方法。

public class OperatorDemo02{
	public static void main(String[] args){
		int num1 = 3,num2 = 5;
		/*
		//方法一:
		//优点:很好理解
		//缺点:需要开辟内存空间
		int temp;
		temp = num1;
		num1 = num2;
		num2 = temp;
		*/
		/*
		//方法二:
		//优点:不需要开辟内存空间
		//缺点:难理解
		num1 = num1 + num2;
		num2 = num1 - num2;
		num1 = num1 - num2;
		*/
		/**/
		//方法三:
		//优点:效率高(二进制在计算)
		//缺点:极难理解
		num1 = num1 ^ num2;
		num2 = num1 ^ num2;
		num1 = num1 ^ num2;
		
		System.out.println(num1+" "+num2);
	}
}
           
经典面试题
int num = 5;
		num = num++;
		System.out.println(num);//输出结果为5
           
3.2 扩展赋值运算符
num += m ===> num = (num左边的数据类型)(num + (m));
		num -= m ===> num = (num左边的数据类型)(num - (m));
		num *= m ===> num = (num左边的数据类型)(num * (m));
		num /= m ===> num = (num左边的数据类型)(num / (m));
		num %= m ===> num = (num左边的数据类型)(num % (m));
           
经典面试题:
1、	short num = 11; num = num + 1; 和short num = 11; num += 1;哪一个正确呢?
	答:short num = 11; num += 1;正确;
	原因:num = num + 1 是整形int与short相加变为int型,而返回结果是short,所以不符合
	2、	int sum += 30; 请问这行语句语法是否正确???
	答:不符合,因为sum未赋值
           
例题:

输入三个学生成绩并求平均值(由于担心有的人没学过数组,循环结构,在此用最笨的法子写,谢谢支持)

不知道Scanner从键盘输入可以去看我的另一篇文章

import java.util.Scanner;
public class OperatorDemo03{
	public static void main(String[] args){
		double sum = 0;
		Scanner input = new Scanner(System.in);
		System.out.println("请输入第一个学生成绩");
		sum += input.nextDouble();
		System.out.println("请输入第二个学生成绩");
		sum += input.nextDouble();
		System.out.println("请输入第三个学生成绩");
		sum += input.nextDouble();
		System.out.println("平均成绩:"+ sum / 3);
	}
}
           

4.关系运算符(返回的只能是boolean类型)

关系运算符用来进行比较运算,关系运算符的运算结果是boolean类型。

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

由于过于简单,就不啰嗦了

例题;

1. 定义三个数,然后对这三个数做升序排序。(还是一样,这里只为让大家看得更清晰)
public class OperatorDemo04{
	public static void main(String[] args){
		int num1 = 4, num2 = 3,num3 = 5;
		if(num1 > num2)
		{
			num1 = num1 ^ num2;
			num2 = num1 ^ num2;
			num1 = num1 ^ num2;
		}
		if(num2 > num3)
		{
			int temp = num1;
			num1 = num2;
			num2 = temp;
		}
		if(num1 > num2)
		{
			num1 = num1 + num2;
			num2 = num1 - num2;
			num1 = num1 - num2;
		}
		System.out.println("升序排列为:"+num1+" "+num2+" "+num3);//输出 3 4 5
	}

           

5.逻辑运算符

5.1 & 与

&运算特点:

true & true = true;

true & false = false;

false & true = false;

false & false = false;

&与运算:

只有两边都为true,结果才为true

否则为false

5.2 | 或

|运算特点:

true | true = true;

true | false = true;

false | true = true;

false | false = false;

|或运算:

只有两边都为false,结果才为false

否则为true

5.3 && 逻辑与运算, || 逻辑或

&&逻辑与(短路与):

只有两边都为true,结果才为true

只要左侧为false,则右边表达式不执行,直接返回false

||逻辑或(短路或):

只有两边都为false,结果才为false

只要左侧为true,则右边表达式不执行,直接返回true

5.4 ^ 逻辑异或

^运算特点:

true ^ true = false;

true ^ false = true;

false ^ true = true;

false ^ false = false;

^运算规律:

运算两边相同,那么结果肯定为false

运算两边不同,那么结果肯定为true

5.5 ! 逻辑非

!运算特点:

!true = false;

!false = true;

左移运算:<<

也就是(<<n)乘以2的n次方。

右移运算:>>

也就是(>>n)除以2的n次方。

无符号右移:<<<

与右移相似,但是无论值正负,最高位永远补零

例题:

1)判断一个数是否在4(不包含)~6(包含)之外;

import java.util.Scanner;
public class OperatorDemo05{
	public static void main(String[] args){
		//2、判断一个数是否在4(不包含)~6(包含)之外;
		Scanner input = new Scanner(System.in);
		System.out.println("请输入一个数:");
		int num = input.nextInt();
		if(num > 4 && num <= 6)
		{
			System.out.println("在");
		}
		else
		{
			System.out.println("不在");
		}
	}
}
           

2)判断true还是false

/*
		int num = 10;
		System.out.println(false && (num=5)>3);//false,短路与
		System.out.println(num);//10
	*/	
           
注意:& 与 &&,| 和 || 区别
&&和&的运算结果是一样的,但是运算的过程有所不同
&:无论左边的运算结果是什么,右边都需要参与运算
&&:如果左边运算结果为false,那么右边就不需要参与运算了,直接返回结果false
	 如果左边运算结果为true,那么需要进行右边的运算,并返回右边运算的结果
	 
           
||和|的运算结果是一样的,但是运算的过程有所不同
|:无论左边的运算结果是什么,右边都需要参与运算
||:如果左边运算结果为true,那么右边就不需要参与运算了,直接返回结果true
如果左边运算结果为false,那么需要进行右边的运算,并返回右边运算的结果
           

6. 位运算(二进制计算)

位运算是直接对二进制进行的运算。(大家可以看我后续的文章),这个小节就不做过多解释

6.1 &位运算

位都为1,结果才为1,否则结果为0

例如:7 & 3 = 3

111
 &011
------
  011

           
6.2 |位运算

位只要有一个为1,那么结果就是1,否则就为0

例如:7 | 3 = 7

111
 |011
------
  111  
           
6.3 ^ 位运算

两个操作数的位中,相同则结果为0,不同则结果为1

例如:7 ^ 3 = 4

111
 ^011
------
  100
           
6.4 ~位运算

如果位为0,结果是1,如果位为1,结果是0

例如:~6 = -7

0000 0000 0000 0000 0000 0000 0000 0110
取反 1111 1111 1111 1111 1111 1111 1111 1001
           

7.三元运算符

三元运算符又称为三目运算。

语法格式:条件表达式? 表达式1 : 表达式2

如果条件表达式为true,则取表达式1的值,否则就取表达式2的值。

【随堂练习】

1、获取两个数的最大值或最小值

int a = 5, b = 8,max;
max=a>b?a:b//返回结果 8
           

8.运算符优先级

关于这节大家不用死记,多敲多练即可。也可以看我后续文章中有更新。