这里我先说一下运算符和操作数:

运算符是表示运算的符号,参与运算的数据称为操作数

算数运算符

1.一元运算符只有一个操作数(+、-、++、–四种)

如:+x表示x取正数,++x或x++表示x加1

2.二元运算符有2个操作数(+、-、*、/(除)、%(求余)五种)

如:p1+p2表示两数相加

关系运算符

有两个操作,数关系运算符(>、<、>=、<=、==、!=)是布尔类型,表达式的结果为true或false

如:p1>p2(p1=1,p2=3)结果为false

布尔逻辑运算符

1.逻辑与&&、逻辑或||是二元运算符(短路运算)

如:x>0&&y<4若x=-1,y=3,在逻辑与中,x>0不成立则整个表达式都不成立,结果为false,不用在判断y<4是否成立了。

       x>0||y<4若x=2,y=5,在逻辑与中,x>0成立则整个表达式都成立,结果为true,不用在判断y<4是否成立了。

2.逻辑非!是一元运算符。

位运算符

 位运算对二进制进行操作。

1.~按位取反,如:~11001010→00110101

2.&按位与,如:0&0=0,0&1=0,1&1=1

  按位与可以用来屏蔽特定的位,对特定的位清零。 int theFourthBit=i&8; (8=00001000),在变量i的二进制中除了右边第四位没有变化以外,其余位全部被清零。

  也可以用来取某个数中某些指定的位,如:取整数变量i的第五位,可以这样表示int theFifthBit=i&16 (16=00010000)。

3.|按位或,如:0|0=0,0|1=1,1|1=1

  按位或和可以将某些位变为1,如:将整型变量i的第四位和第五位换成1,可以用语句(int setFourthAndFifthBit=i | 24; 来实现(24=00011000)

4.^按位异或,如:0^0=0,0^1=0,1^0=1,1^1=0

  可以实现两个数的交换,而不使用临时变量,如:交换两个整数a ,b的值,可以用下列语句实现:

  int a=15,b=24;//(15=00001111,24=00011000)

  a=a^b;//a=23(00010111)

  b=b^a;//b=15

  a=a^b;//a=24

5.移位运算符(<<、>>、>>>)

这里要先了解补码的概念:Java使用补码来表示二进制数,在补码表中,最高位是符号位,正数用0表示,负数用1表示。

注意:如何得到一个负数的补码?这里我用-1来举例:把负数-1绝对值的补码(|-1|的补码及1的补码(00000001))按位取反(得到11111110),然后对整个数加1,就得到-1的补码11111111了。

  >>算术右移,如:a=11001101,则a>>2=11110011 (移到右端的低位被舍去,最高位的值移入的还是原来高位的那个值)

    右移一位相当于除以2取商,而且用右移实现除法比除法速度要快。

  <<算数左移,如:a=00001111,则a<<2=00111100(右边补0)高位左移后溢出,舍弃不起作用。

    在不产生溢出的情况下,左移1位相当于承2,左移实现乘法比乘法运算速度要快。

  >>>逻辑右移(无符号右移)如:a=11010011,则b>>>2=00110100

赋值运算符

 =复制运算涉及到类型的转换,如:

  byte b=12;

  int i=b;//byte自动转换为int类型

  int a=22;

  byte b=(byte) a;//int强制转换为byte类型           

条件运算符

三元运算符? :  如:p1>p2?a:b;  若p1>p2成立,结果取a,不成立就取b。

版权声明:本文为T815原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/T815/p/12203345.html