运算符
一、算术运算符
+、-、*、/、%、++、-- 共7个。
int x = 30;
int y = 18;
// 30 - 17 + 17 / 2 + 32 - 31
int z = x++ - --y + y++ / 2 + ++x - --x;
System.out.println(x);//31
System.out.println(y);//18
System.out.println(z);//22
对于更复杂的运算应该使用Math类。
二、赋值运算符
=
拓展的赋值运算符:+=、-=、*=、/=
三、比较运算符
<、<=、>、>=、==、!=
比较运算符用于比较连个变量或两个值,如果符合预期得到true,否则得到false。
四、逻辑运算符
只能对boolean值进行运算。
&&:与。两个条件同时为true,结果为true。
&:不短路与。
||:或。任一条件为true,结果为true。
|:不短路或。
^:异或。两个条件相同,同为true或同为false,结果为true。
!:非。
- &&与&的区别
&&:如果第一个操作数已经是false,&&运算符不会计算第二个操作数,称之为短路。
&:如果第一个操作数已经是false,&运算符依然会计算第二个操作数,称之为不短路。 - ||与|的区别:
||:如果第一个操作数已经是true,|| 运算符不会计算第二个操作数,称之为短路。
|:如果第一个操作数已经是true,| 运算符依然会计算第二个操作数,称之为不短路。
一般来说,编程时用短路与和短路或。
五、位运算符
只能对整型(byte、short、int、long、char)运算。
- 负数的进制码:保存的是补码。
-原码:数直接算出来的叫原码。最高位为符号位,0代表正数,1代表负数。
-反码:除符号位外,其它位都按位取反。
-补码:反码+1 - 正数的补码等于补码。
&:补码按位与。上下两位都是1时得到的结果才是1。得到的结果是最终结果的补码。
|:补码按位或。上下两位中有一个是1时得到的结果才是1。得到的结果是最终结果的补码。
~:按位取反。0变1,1变0。正数变为负的(绝对值+1),负数变为正的(绝对值+1)。
^:按位异或。上下两位相同时得到结果为0,不同时得到结果为1。
<<:左移。左移n位相当于乘以2的n次方。2乘以8最快的运算方法:2<<3
>>:右移。右移n位相当于除以2的n次方。除不尽的情况下,实际结果总是比除得结果略小的整数。
>>>:无符号右移,移位之后高位始终不0。如果被移动的数是正数,该运算符与>>完全一样。
六、三目运算符
-
逻辑表达式?值1:值2
如果逻辑表达式为true,整个表达式返回值1,;否则返回值2。 -
三目运算符的嵌套:嵌套后的三目运算符表达式可能返回3个甚至更多值的其中一个。
七、运算符的结合性和优先级
- 结合性:控制运算符的运算方向,大部分运算符都是从左到右。= 运算符是从右到左。
- 优先级:先乘除后加减。记不清时用括号保证优先级。