第 3 章 运算符和表达式
运算符指明对操作数所进行的运算。按操作数的数目来分 ,可以有一元运算符 (如 ++、--),二元运算符(如 +、>)和三元运算符 (如?:),它们分别对应于一个、两个和三个操作数 。 对于一元运算符来说 ,可 以 有 前 缀 表 达 式 (如++i) 和后缀表达式 (如 i++),对于二元运算符来说则采用中缀表达式(如a+b)。 按照运算符功能来分,基本的运算符有下面几类 :
1.算术运算符 (+,-,*,/,%,++,--)
2.关系运算符 (>,<,>=,<=,==,!=)
3.布尔逻辑运算符 (!,&&,||)
4.位运算符 (>>,<<,>>>,&,|,^,~ )
5.赋值运算符 (=,及其扩展赋值运算符如+=)
6.条件运算符 ( ?:)
7.其它
(包括分量运算符• ,下标运算符 [],实例运算符 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 [NextPage]
§ 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( String args[] ){
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。
对负数而言,把该数绝对值的补码按位取反,然后对整个数加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
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15080520号-20 珠峰网 版权所有 All Rights Reserved
|