一、概述:
Java的运算符,分为四类:
算数运算符:+ - * / % ++ --
关系运算符:== != > >= < <=
逻辑运算符:&& || ! ^ & |
位运算符:& | ~ ^ >> << >>>
二、算数运算符
+ - * / % ++ --分别是加减乘除、取余、自增、自减,这些都不必多说。需要特别说明的是%,各个环境下%运算符的含义不同,比如c/c++,java 为取余,而python则为取模。
【取余】与【取模】的区别:取余运算向0 方向舍入,而取模运算向负无穷方向舍入;例如:-7%4
取余:-7/4 = -1;-7%4 = -7-(-1*4) = -3
取模:-7/4 = -2;-7%4 = -7-(-2*4) = -1
三、关系运算符
四、逻辑运算符
&& || ! 双与、双或、非三个都是很常用的,这里不细说,讲讲另外三个。
1、& |:这两个和&& ||作用一样,不同点在与不管运算符左边结果如何,仍会判断右边,所以无特殊需求不建议使用;
2、^:这个符合叫做异或,相同为false,不同为true,例如:false^false=false
五、位运算符
1、& | ~这三个实际上是二进制补码按位运算出【结果的补码】
与&:A & B --> A的补码 & B的补码 = C(结果的补码) --> C的补码 = 结果 应用:将特定位,置为0
或|:A | B --> A的补码 | B的补码 = C(结果的补码) --> C的补码 = 结果 应用:将特定位,置为1
取反~:~A --> ~ A的补码 = C(结果的补码) --> C的补码 = 结果
2、异或^:同0异1
测试结果:不管是根据原码算还是补码算,结果都一致 应用:散列,其结果不偏向与1或0中的任何一个
3、原码基础上进行左右移动
有符号右移>>:整体右移,左边补0后符号位补上原符号值
无符号左移<<:整体右移,右边补零
无符合右移>>>:整体左移,左边补零
应用:高效的进行【2的冥次方】的乘除
*、原码与补码
a、原码:数字的二进制码
b、正数的补码:原码本身
c、负数的补码:原码除符号位,取反加一
d、补码的补码等于原码