运算符

一、算术运算符

+、-、*、/、%、++、-- 共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个甚至更多值的其中一个。

七、运算符的结合性和优先级

  • 结合性:控制运算符的运算方向,大部分运算符都是从左到右。= 运算符是从右到左。
  • 优先级:先乘除后加减。记不清时用括号保证优先级。
posted @ 2020-01-29 12:37  又又又8  阅读(60)  评论(0编辑  收藏  举报