二级JAVA第三章辅导:运算符和表达式
文章作者 100test 发表时间 2007:04:06 21:26:11
来源 100Test.Com百考试题网
运算符指明对操作数所进行的运算。按操作数的数目来分一元(如 -),二元运算符(如 、>)和三元运算符(如?:),它们分别对应于一元运算符来说,可以有前缀表达式(如  i)和后缀表达式(如采用中缀表达式(如a b)。按照运算符功能来分,基本的运算符分下面几类: 
算术运算符( ,-,*,/,%,  ,--) 
关系运算符(>,<,>=,<=,==,!=) 
布尔逻辑运算符(!,&.&.,||) 
位运算符(>>,<<,>>>,&.,|,^,~) 
赋值运算符(=,及其扩展赋值运算符如 =) 
条件运算符(?:) 
其它(包括分量运算符·,下标运算符[],实例运算符instance of,内存分配运算符new,强制类型转换运算符(类型),方法调用运算符()等) 
本章中我们主要讲述前6类运算符。 
§3.1算术运算符 
算术运算符作用于整型或浮点型数据,完成算术运算。 
一、二元算术运算符,如下表所示 
运算符 用法 描述 
  op1 op2 加 
- op1-op2 减 
* op1*op2 乘 
/ op1/op2 除 
% op1%op2 取模(求余) 
Java对加运算符进行了扩展,使它能够进行字符串的连接,如"abc" "de",得到串"abcde"。我们将在第七章中讲解。 
与C、C  不同,对取模运算符%来说,其操作数可以为浮点数,如37.2=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.下面的例子说明了算术运算符的使用 
public class ArithmaticOp{ 
public static void main(String args[]){ 
int a=5 4.//a=9 
int b=a*2.//b=18 
int c=b/4.//c=4 
int d=b-c.//d=14 
int e=-d.//e=-14 
int f=e%4.//f=-2 
double g=18.4. 
double h=g%4.//h=2.4 
int i=3. 
int j=i  .//i=4,j=3 
int k=  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:\>java ArithmaticOp 
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>op2 op1大于op2  
>  op1>=op2 op1大于或等于op2  
< op1<op2 op1小于op2  
<= op1<=op2 op1小于或等于op2  
== op1==op2 op1与op2相等  
!= op1!=op2 op1与op2不等  
Java中,任何数据类型的数据(包括基本类型和组合类型)都可以通过==或!=来比较是否相等(这与C、C  不同)。 
关系运算的结果返回true或false,而不是C、C  中的1或0。 
关系运算符常与布尔逻辑运算符一起使用,作为流控制语的判断条件。如 
if(a>b&.&.b==c) 
§3.3布尔逻辑运算符 
布尔逻辑运算符进行布尔逻辑运算,如下表所示: 
op1 op2 op1&.&.op2 op1||op2 !op1  
false false false false true  
false true false true true  
true false false true false  
true true true true false  
·&.&.、‖ 为二元运算符,实现逻辑与、逻辑或。 
·!为一元运算符,实现逻辑非。 
·对于布尔逻辑运算,先求出运算符左边的表达式的值,对或运算如果为true,则整个表达式的结果为true,不必对运算符右边的表达式再进行运算.同样,对与运算,如果左边表达式的值为false,则不必对右边的表达式求值,整个表达式的结果为false。 
下面的例子说明了关系运算符和布尔逻辑运算符的使用。 
public class RelationAndConditionOp{ 
public static void main(Stringargs[]){ 
int a=25,b=3. 
boolean d=a<b.//d=false 
System.out.println("a<b=" d). 
int e=3. 
if(e!=0&.&.a/e>5) 
System.out.println("a/e=" a/e). 
int f=0. 
if(f!=0&.&.a/f>5) 
System.out.println("a/f=" a/f). 
else 
System.out.println("f=" f). 
} 
} 
其运行结果为: 
C:\>java RelationAndConditionOp 
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。