运算符指的是针对常量和变量间运算的符号。
常见的运算符包括:算术运算符,逻辑运算符,位运算符,关系运算符,赋值运算符,三目运算符,移位运算符
算术运算符
算术运算符包括:+(加)、-(减)、*(乘)、\(除)、%(求余)、++(自增)、--(自减)。
+运算符除了用作加法外还可以用作字符串连接符。
Tips:分离一个数的每一位,例如:1234
个位:(1234/1)%10
十位:(1234/10)%10
百位:(1234/100)%10
千位:(1234/1000)%10
++、--属于单目运算符,即只有一个操作数,x++表示x+1,x--表示x-1。
单独使用时,放在操作数的左边和右边没有任何区别,参与运算时,若放置在操作数左边,则代表先自增(自减),再参与运算;若放置在操作数右边,则代表先参与运算再自增(自减)。
一个操作数不能左右两边同时放置++或--。
例:若n=5,(1)n = ++n + ++n;(2)n= n++ + n++;
第一个式子中n = 6 + 7 = 13,而第二个 n = 5 + 6 = 11
赋值运算符
=在Java中并不表示相等,而是用于赋值,表示数学意义上相等的应该用==。
扩展赋值运算符:
+=、-=、*=、\=、%=
扩展赋值运算符相当于将算术运算和赋值运算合并,例如n+=2;代表n=n+2。
Tips:但赋值运算符会自动向目标类型转化,
例如:byte n = 2; n = n+1;会报错,无法将int类型自动转为byte类型
而byte n = 2; n += 1;能通过编译。
关系运算符
关系运算符包括 ==、!=、>=、<=、>、
关系运算返回的值是布尔类型,例如3>=2,返回值是true。
关系运算符通常用于分支或循环语句的条件判断。
逻辑运算符
逻辑运算符包括&(按位与)、|(按位或)、^(异或)、&&(短路与)、||(短路或)、!(非)。
与:有一个false结果都为false;
或:有一个true结果都为true。
异或:一个数对另一个数异或两次,数值本身不做任何改变。
Tips:& 和 && 的区别
& 表示按位与,无论什么情况都会同时计算运算符两边的表达式
&& 表示短路与, 如果前面的表达式为false,那么无论后面结果如何,都不会去计算后面表达式的值
&&开发中使用,&基本不用
&常用于位运算,位运算的效率比普通运算要高很多
例:1001 & 0110 = ? 9 & 6
1 0 0 1 9
& 0 1 1 0 6
-----------
0 0 0 0 0
1 0 0 1
| 0 1 1 0
-----------
1 1 1 1 15
^ : 相同为false,不同为true
1001 & 0110 = ?
1 0 0 1
^ 1 1 1 0
-----------
0 1 1 1
! : 取反
当!的个数是奇数个的时候,结果相反
当!的个数是偶数个的时候,结果不变
三目运算符
?:
格式: X ? Y : Z
X表达式必须是boolean类型的表达式
执行流程:
首先计算X表达式的结果, 如果X的结果为true, 那么整个表达式的结果就是Y的值
如果X的结果为false,那么整个表达式的结果就是Z的值
Tips:三目运算符会将Y与Z的类型自动向较大的转化
例如:double x = 120.0;
int y = 9;
System.out.println(x
输出的结果不是9而是9.0
移位运算符
移位运算符:<< >> >>>
<< 左移 : 左边最高位丢弃,右边补0
>> 右移 :
最高位是0,左边补0
最高位是1,左边补1
>>> 无符号右移: 无论最高位是0还是1,左边补0
相关面试题:
1.请用计算机执行效率最快方式计算 2 乘以 16
2 << 4
2.交换两个数的位置
方式一:(最常规,最容易想到的)
int temp ;
int a = 10;
int b = 20;
temp = a;
a = b;
b = temp;
方式二(更高效)
利用异或的特点: 一个数值对另外一个数值进行异或两次,那么数值本身不做任何改变
m = m ^ n;//异或运算交换数字的位置
n = m ^ n;
m = m ^ n;
System.out.println("m:" + m +'\n' + "n:" +n);
方式三
m=m+n;
n = m - n;
m = m - n;
System.out.println("m:" + m +'\n' + "n:" +n);
表达式
表达式: 符合一定语法规则的运算符和操作数的式子
运算符: 算数运算符,赋值运算符,关系运算符,逻辑运算符,位运算符, 三目运算符
操作数: 变量或者常量
a + b a * 6 4 - 3
表达式的分类:
按照复杂程度来分:
简单表达式: 只有一个运算符的表达式 a + b a * 64 - 3
复杂表达式: 两个或者两个以上的运算符组成的表达式 (a > b) && (a < b)
如果复杂表达式就必须要知道运算符的优先级
按照运算符两边的操作数来分
单目 双目 三目
按照名称来分
a + b 算数表达式
表达式的值: 整个表达式的结果
int a = 30; int b = 40; a * b
表达式的值的类型:
int a = 30; double b = 40.0; a * b
运算符的优先级
1.有括号先计算括号里面的
2.单目运算符 > 双目运算符 > 三目运算符
3.算数运算符(* / % > + -) > 关系运算符(> <...> == !=) > 逻辑运算符(&& > ||) > 条件运算符 > 赋值运算符
4.如果运算符的优先级相同,从左至右即可
5.+ - > ++ -- !
Tips: 如果针对特别复杂的表达式,可以根据运算符的优先级规律,然后使用()改变优先级,提高程序的可读性