简介
由笔者整理的有关于Java里常见的运算符知识整理。
1、算术运算符
- +加
- -减
- *乘
- / 整除——结果就只保留商,例如10/3=3
- % 取余——结果就只保留余数,例如10/3=1
前三个都没有什么好说的,就是大家从小学一年级就认识的三个好哥们,在程序设计中经常会使用到的算术运算符应该是整除和取余,大家请注意区分。
2、比较(关系)运算符
这个比较运算符的等级比算术运算符要高级一点,因为是从初中开始学的高级知识!
- 大于>
- 小于<
- 大于等于>=
- 小于等于<=
- 不等于!=
- 等于==
但是开玩笑归开玩笑,值得注意的是不等于(!=)和等于(==)是计算机中特有的 注意与赋值符号(=)区分。
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、三目运算符
其实在写这篇博客之前,我也很难确定三目运算符是否算真正意义上的运算符,毕竟它是if函数的简写。为了方便理解,我们先用一段代码来举例。
int a = 1;
int b = 2;
int c =a > b ? 666 : 888
System.out.println(c);
这个地方c的输出应该888,因为这段代码实现的功能类似于
if (a>b)
c=666;
else
c=888;
所以三目运算符其实就是if函数的简写,且一般格式为: 表达式 ? 值1: 值2
7、位运算符
位运算的实际原理是基于计算机底层二进制数的运算,一般有这几种。其中与、或、异或的运算结果为布尔类型,即ture和false
- &与运算符 都为真,才为真
- |或运算符 一者为真,就为真
- ^异或运算符 两命题相反,则为真
- ~按位取反符
按位取反就是把值的补码取反后再转成原码输出,例如:
对6取反(~6)
6的原码 0000 0110
6的反码 0000 0110
6的补码 0000 0110
计算机只能对补码操作,那么对6取反(~6),实际操作的是补码,每位取反
6的补码全部取反 1111 1001 (得到的这个数是最高为代表负数)
补码–>反码 -1 1111 1000
反码–>原码 取反 1000 0111
故~6=-7
- a << n左移运算符
将数(a)的二进制原码左移n位,如a=2
0000 0010 —>0000 1000
运算结束后a=8
- >>有符号右移运算符
将数的二进制原码向右移的同时,舍弃右边的数字,并保留符号位补0,例如a = -5:
1000 0101 >> 1000 0001
运算结束后a=-1
- >>>无符号右移运算符
将数的二进制原码向右移的同时,舍弃右边的数字,其他全补0,例如a = -5:
1000 0101 >> 0000 0001
运算结束后a=1