前言
了解运算符并能熟练使用
一、常见运算符有哪些?
1.算术运算符: + - * / %
2.比较运算符:< ; > ; = ; <= ; >=; !=; == (它们的输出结果为boolean型)
3.逻辑运算符:与 && & // 表示的是并且关系,全部为真则为真,否则假 非 || | // 表示或者的关系,只要一者为真则为真,全部为假才为假
或 ! // 否定,取反
4.自加和自减运算符:a++, ++a, a--,--a
5.赋值运算符:= // 将等号右侧的值赋给左侧的变量
+= // a += 10 <===> a = a + 10
-=
*=
/=
%=6.三目运算符:
表达式 ? 值1: 值2
int a = 10;
int b = 20;
int c = a > b ? 100 : 200; // 如果a>b则输出100;如果b>a则输出200;7.位运算符
位运算的实际原理是基于计算机底层二进制数的运算,一般有这几种。其中与、或、异或的运算结果为布尔类型,即ture和false
- &与运算符 都为真,才为真
- |或运算符 一者为真,就为真
- ^异或运算符 两命题相反,则为真
- ~按位取反符
- a << n左移运算符
- >>有符号右移运算符
- >>>无符号右移运算符
二、注意事项
1. 算术运算符中
- / 整除——结果就只保留商,例如10/3=3
- % 取余——结果就只保留余数,例如10/3=1
2.比较运算符
1.值得注意的是不等于(!=)和等于(==)是计算机中特有的 注意与赋值符号(=)区分。
3.逻辑运算符
用&和|也可以达到同样的效果,这是正确的。但是在执行同时对多个条件的判断时,若双与(&&)或双或(||)已经判断出整条命题的结果后会直接跳过后半部分命题的判断从而节省资源,使程序的运行速度更快,所以更在实际应用中推荐大家使用双与(&&)和双或(||)。
4.自加自减符
a++和a--
这两个语句是和a=a+1和a=a-1是相同的含义,不过在循环中是先加再赋值,这点非常重要,也就代表了“先”加加格式是高优先级自加运算符
++a和--a
这两个语句在平时是和a=a+1和a=a-1是相同的含义,不过在循环中是先赋值再加,这点非常重要,也就代表了“后”加加格式是低优先级自加运算符
*前加加的优先级别非常高,仅次于括号
后加加的优先级别非常非常低,甚至比赋值符都低*5.赋值运算符
赋值运算的六个符号是有相同规律的,都是先运算再赋值。
=
将等号右侧的值赋给左侧的变量+=
a += 10 <===> a = a + 10-=
a -= 10 <===> a = a - 10*=
a *= 10 <===> a = a * 10/=
a /= 10 <===> a = a / 10&=
a &= 10 <===> a = a & 10
6.位运算符
- &与运算符 都为真,才为真
- |或运算符 一者为真,就为真
- ^异或运算符 两命题相反,则为真
- ~按位取反符
按位取反就是把值的补码取反后再转成原码输出,例如:
对6取反(~6)
6的原码 0000 0110
6的反码 0000 0110
6的补码 0000 0110
计算机只能对补码操作,那么对6取反(~6),实际操作的是补码,每位取反
6的补码全部取反 1111 1001 (得到的这个数是最高为代表负数)
补码–>反码 -1 1111 1000
反码–>原码 取反 1000 0111
故~6=-75.a << n左移运算符
将数(a)的二进制原码左移n位,如a=2
0000 0010 —>0000 1000
运算结束后a=86.>>有符号右移运算符
将数的二进制原码向右移的同时,舍弃右边的数字,并保留符号位补0,例如a = -5:
1000 0101 >> 1000 0001
运算结束后a=-17.>>>无符号右移运算符
将数的二进制原码向右移的同时,舍弃右边的数字,其他全补0,例如a = -5:
1000 0101 >> 0000 0001
运算结束后a=1
总结
java中运算符不仅于此,还有很多未曾谈及的运算符和各种细节,熟练使用这些运算符的前提是了解个中涵义,加上大量练习。路漫漫其修远兮,吾将上下而求索!诸君加油