这里是引用
算术运算符
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.运算符优先级
关于这节大家不用死记,多敲多练即可。也可以看我后续文章中有更新。