购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第一卷 第三章 运算符和表达式

运算符指明对操作数所进行的运算。按操作数的数目来分,可以有一元运算符(如++、--),二元运算符(如+、>)和三元运算符(如?:),它们分别对应于一个、两个和三个操作数。对于一元运算符来说,可以有前缀表达式(如++i)和后缀表达式(如i++),对于二元运算符来说则采用中缀表达式(如a+b)。按照运算符功能来分,基本的运算符有下面几类:

1.算术运算符(+,-,*,/,%,++,--)

2.关系运算符(>,<,>=,<=,==,!=)

3.布尔逻辑运算符(!,&&,)

4.位运算符(>>,<<,>>>,&,,,~)

5.赋值运算符(=,及其扩展赋值运算符如+=)

6.条件运算符(?:)

7.其它(包括分量运算符·,下标运算符,实例运算符instanceof,内存分配运算符new,强制类型转换运算符(类型),方法调用运算符等)

本章中我们主要讲述前6类运算符。

§3.1算术运算符

算术运算符作用于整型或浮点型数据,完成算术运算。

一、二元算术运算符,如下表所示

运算符用法描述

+op1+op2加

-op1-op2减

*op1*op2乘

/op1/op2除

%op1%op2取模(求余)

Java对加运算符进行了扩展,使它能够进行字符串的连接,如"abc"+"de",得到串"abcde"。我们将在第七章中讲解。

与C、C++不同,对取模运算符%来说,其操作数可以为浮点数,如37.2%10=7.2。

二、一元算术运算符,如下表所示:

运算符用法描述

++op正值

--op负值

++++op,op++加1

----op,op--减1

i++与++i的区别

i++在使用i之后,使i的值加1,因此执行完i++后,整个表达式的值为i,而i的值变为i+1。

++i在使用i之前,使i的值加1,因此执行完++i后,整个表达式和i的值均为i+1。

对i--与--i同样。

例3.1.下面的例子说明了算术运算符的使用

publicclassArithmaticOp{

publicstaticvoidmain(Stringargs){

inta=5+4;//a=9

intb=a*2;//b=18

intc=b/4;//c=4

intd=b-c;//d=14

inte=-d;//e=-14

intf=e%4;//f=-2

doubleg=18.4;

doubleh=g%4;//h=2.4

inti=3;

intj=i++;//i=4,j=3

intk=++i;//i=5,k=5

System.out.println("a="+a);

System.out.println("b="+b);

System.out.println("c="+c);

System.out.println("d="+d);

System.out.println("e="+e);

System.out.println("f="+f);

System.out.println("g="+g);

System.out.println("h="+h);

System.out.println("i="+i);

System.out.println("j="+j);

System.out.println("k="+k);

}

}

其结果为:

C:\>javaArithmaticOp

a=9

b=18

c=4

d=14

e=-14

f=-2

g=18.4

h=2.4

i=5

j=3

k=5

§3.2关系运算符

关系运算符用来比较两个值,返回布尔类型的值true或false。关系运算符都是二元运算符,如下表所示:

运算符用法返回true的情况

>op1>op2op1大于op2

>=op1>=op2op1大于或等于op2

<op1<op2op1小于op2

<=op1<=op2op1小于或等于op2

==op1==op2op1与op2相等

!=op1!=op2op1与op2不等

Java中,任何数据类型的数据(包括基本类型和组合类型)都可以通过==或!=来比较是否相等(这与C、C++不同)。

关系运算的结果返回true或false,而不是C、C++中的1或0。

关系运算符常与布尔逻辑运算符一起使用,作为流控制语句的判断条件。如

if(a>b&&b==c)

§3.3布尔逻辑运算符

布尔逻辑运算符进行布尔逻辑运算,如下表所示:

op1op2op1&&op2op1op2!op1

falsefalsefalsefalsetrue

falsetruefalsetruetrue

truefalsefalsetruefalse

truetruetruetruefalse}

·&&、‖ 为二元运算符,实现逻辑与、逻辑或。

·!为一元运算符,实现逻辑非。

·对于布尔逻辑运算,先求出运算符左边的表达式的值,对或运算如果为true,则整个表达式的结果为true,不必对运算符右边的表达式再进行运算;同样,对与运算,如果左边表达式的值为false,则不必对右边的表达式求值,整个表达式的结果为false。

下面的例子说明了关系运算符和布尔逻辑运算符的使用。

publicclassRelationAndConditionOp{

publicstaticvoidmain(Stringargs){

inta=25,b=3;

booleand=a<b;//d=false

System.out.println("a<b="+d);

inte=3;

if(e!=0&&a/e>5)

System.out.println("a/e="+a/e);

intf=0;

if(f!=0&&a/f>5)

System.out.println("a/f="+a/f);

else

System.out.println("f="+f);

}

}

其运行结果为:

C:\>javaRelationAndConditionOp

a<b=false

a/e=8

f=0

注意:上例中,第二个if语句在运行时不会发生除0溢出的错误,因为e!=0为false,所以就不需要对a/e进行运算。

§3.4位运算符

位运算符用来对二进制位进行操作,Java中提供了如下表所示的位运算符:

位运算符中,除 ~ 以外,其余均为二元运算符。

操作数只能为整型和字符型数据。

3.4.1补码

Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数的符号位为0,负数为1。补码的规定如下:

对正数来说,最高位为0,其余各位代表数值本身(以二进制表示),如+42的补码为00101010。

对负数而言,把该数绝对值的补码按位取反,然后对整个数加1,即得该数的补码。如-42的补码为11010110(00101010按位取反11010101+1=11010110)

用补码来表示数,0的补码是唯一的,都为00000000。(而在原码,反码表示中,+0和-0的表示是不唯一的,可参见相应的书籍)。而且可以用111111表示-1的补码(这也是补码与原码和反码的区别)。

3.4.2按位取反运算符~

~ 是一元运算法,对数据的每个二进制位取反,即把1变为0,把0变为1。

例如:

0010101

~

1101010

注意,~运算符与-运算符不同,~21≠-21。

3.4.3按位与运算符&

参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0。即:

0&0=0,0&1=0,1&0=0,1&1=1 HUhm7A2nvZnUWw0fn+z7vtux06AR/HhDwrp8IudSu3gqYYXH9xLPtTwinp5kEvzG

点击中间区域
呼出菜单
上一章
目录
下一章
×