一、运算符基本介绍
算数运算符 | + , - , * , / , % , ++ , -- |
关系运算符 | > , >= , < , <= , == , != |
赋值运算符 | += , -= , /= , *= , %= |
逻辑运算符 | & , | , ! , || , && , ^ |
位运算符 | & , | , ~ , ^ , >> , >>> , << |
三目运算符 | 表达式?表达式1 : 表达式2 |
二、重难点介绍
(1)算数运算符
【1】两个int型做除法运算,分母为0时,编译不会报错,但运行时会报异常。(ByZero)
两个浮点型做除法运算,分母为0.0时,编译不会报错,运行会出现infinity(-infinity)表示无穷。
【2】关于自增运算符
++在变量右边,先使用变量当前的值参与运算,在让变量值加1;a++;(先运算,在自增)
++在变量左边,先让变量值加1,在使用变量值参与运算;++a;(先自增,在运算)
自减也是同理
(2)关系运算符
无
(3)赋值运算符
+=:将左侧变量的值和右侧变量的值进行相加,然后再将得到的数,赋值给左侧。a+=b >>>> a=a+b
注意:+=之类的赋值运算符,会自动进行数据类型的强制转换。此外 自增与自减也是。
(4)逻辑运算符
只针对boolean类型的值做运算,并且运行结果也必然为boolean类型。
^ : 异或,左右两边不相同,则结果为true。左右两边相同,则结果为false。
&& 与 &的区别:当&&运算符的左边为false时,则符号右边不在执行。而&左边无论为true还是false,都会执行右边的内容。
|| 与 | 的区别:当||运算符的左边为true时,则符号右边不在执行。而|左边无论为true还是false,都会执行右边的内容。
(5)位运算符
用来针对二进制进行运算,此外,计算机操作的是数的补码
正数:原码,反码,补码都是一样的。
负数:
反码:原码符号位不变,其他位取反。
补码:反码的最后一个二进制位+1;
&:根据每个二进制进行运算
如果同一个二进制位都为1,结果是1
如果同一个二进制位有一个为0,结果是0
|:根据每个二进制进行运算
如果同一个二进制位都为0,结果是0
如果同一个二进制位有一个为1,结果是1
^:相同为0,不同为1。一个数,对同一个数“异或”两次,仍然是它本身。
~:取反(符号位也变)
<<:左移。将二进制数整体向左移动相应的位数,左侧多出来的位数直接舍掉,后面空出来的位数补0。
>>:右移。如果是正数,将二进制数整体向右移动相应的位数,左侧不足的位数补0。
如果是负数,先将原码变成补码,将补码整体向右移动相应的位数,左侧不足的位数补1,之后进行补码-1(因为之前由反码到补码是最后二进制位+1的),在进行反码。最后,得出结果。
>>>:无符号右移。不论正负,高位均补0。
(6)三目运算符
表达式 ? 表达式1 : 表达式2
补充:比较三个数的大小
int max = a > b ? (a>c ? a : c) : (a>b ? a : b)
三、运算符优先级