📄 java02_08.htm
字号:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>Java语言教程</title>
</head>
<body background="Bg.gif">
<p align="center"><b><font size="5">2.8 运算符与表达式</font></b></p>
<p>运算符指明对操作数所进行的运算。</p>
<p>按操作数的数目来分,可分为一元运算符(如++、~),二元运算符(如+、>)和三元运算符(如
?:)。对于一元运算符来说,可以有前缀表达式(如++i )和后缀表达式(如i++) <br>
<br>
按照运算符功能来分,基本的运算符可分成下面几类: <br>
<br>
1.算术运算符(+,-,*,/,%,++,--) <br>
<br>
2.关系运算符(>,<,>=,<=,==,!=) <br>
<br>
3.布尔逻辑运算符(!,&&,||) <br>
<br>
4.位运算符(>>,<<,>>>(不带符号右移),&,|,^(异或),~(位反)) <br>
<br>
5.赋值运算符(=,及其扩展赋值运算符如+=) <br>
<br>
6.条件运算符( ?:) <br>
<br>
7.其它(包括分量运算符·,下标运算符[],实例运算符instanceof,内存分配运算符new,强制类<br>
型转换运算符(类型),方法调用运算符() 等) <br>
<br>
本节中我们主要讲述前6类运算符。 <br>
<br>
一、算术运算符 <br>
<br>
算术运算符作用于整型或浮点型数据,完成算术运算。 <br>
<br>
1、二元算术运算符,如下表所示 <br>
</p>
<table border="1" width="80%">
<tr>
<td width="33%"> 运算符</td>
<td width="33%"> 用法 </td>
<td width="34%">描述</td>
</tr>
<tr>
<td width="33%"> +</td>
<td width="33%"> op1+op2</td>
<td width="34%">加</td>
</tr>
<tr>
<td width="33%"> -</td>
<td width="33%"> op1-op2 </td>
<td width="34%">减</td>
</tr>
<tr>
<td width="33%"> * </td>
<td width="33%"> op1*op2</td>
<td width="34%"> 乘</td>
</tr>
<tr>
<td width="33%"> /</td>
<td width="33%">op1/op2</td>
<td width="34%">除</td>
</tr>
<tr>
<td width="33%"> %</td>
<td width="33%"> op1%op2</td>
<td width="34%"> 取模(求余)</td>
</tr>
</table>
<p> Java对加运算符进行了扩展,使它能够进行字符串的连接,如"abc"+"de",得到串"abcde"。我<br>
们将在第五章中讲解。 /根据操作数来作整除或浮点除法。<br>
<br>
与C、C++不同,对取模运算符%来说,其操作数可以为浮点数,如:37.2%10=7.2。 <br>
<br>
2、一元算术运算符,如下表所示: <br>
</p>
<table border="1" width="80%">
<tr>
<td width="33%" align="center"><b> 运算符</b></td>
<td width="33%" align="center"><b>用法</b></td>
<td width="34%" align="center"><b> 描述</b></td>
</tr>
<tr>
<td width="33%"> + </td>
<td width="33%"> +op</td>
<td width="34%"> 正值</td>
</tr>
<tr>
<td width="33%"> -</td>
<td width="33%"> -op</td>
<td width="34%">负值</td>
</tr>
<tr>
<td width="33%"> ++</td>
<td width="33%">++op ,op++</td>
<td width="34%"> 加1 </td>
</tr>
<tr>
<td width="33%"> -- </td>
<td width="33%">--op,op-- </td>
<td width="34%"> 减1</td>
</tr>
</table>
<p>i++与++i的区别 <br>
<br>
i++在使用i之后,使i的值加1,因此执行完i++后,整个表达式的为i,而i的值变为i+1。 <br>
<br>
++i在使用i之前,使i的值加1,因此执行完++i后,整个表达式和i的值均为i+1。 <br>
<br>
对i--与--i同样。 <br>
<br>
例2.5 下面的例子说明了算术运算符的使用 <br>
<br>
public class ArithmaticOp{ <br>
public static void main( String args[] ){ <br>
int a=5+4; //a=9 <br>
int b=a*2; //b=18 <br>
int c=b/4; //c=4 <br>
int d=b-c; //d=14 <br>
int e=-d; //e=-14 <br>
int f=e%4; //f=-2 <br>
double g=18.4; <br>
double h=g%4; //h=2.4 <br>
int i=3; <br>
int j=i++; //i=4,j=3 <br>
int k=++i; //i=5,k=5 <br>
System.out.println("a = "+a); <br>
System.out.println("b = "+b); <br>
System.out.println("c = "+c); <br>
System.out.println("d = "+d); <br>
System.out.println("e = "+e); <br>
System.out.println("f = "+f); <br>
System.out.println("g = "+g); <br>
System.out.println("h = "+h); <br>
System.out.println("i = "+i); <br>
System.out.println("j = "+j); <br>
System.out.println("k = "+k); <br>
} <br>
} <br>
其结果为: <br>
C:\>java ArithmaticOp <br>
a = 9 <br>
b = 18 <br>
c = 4 <br>
d = 14 <br>
e = -14 <br>
f = -2 <br>
g = 18.4 <br>
h = 2.4 <br>
i = 5 <br>
j = 3 <br>
k = 5 <br>
<br>
二、关系运算符 <br>
<br>
关系运算符用来比较两个值,返回布尔类型的值true或false。关系运算符都是二元运算<br>
符,如下表所示: <br>
</p>
<table border="1" width="80%">
<tr>
<td width="33%"> 运算符</td>
<td width="33%"> 用法</td>
<td width="34%"> 返回true的情况</td>
</tr>
<tr>
<td width="33%"> > </td>
<td width="33%"> op1>op2</td>
<td width="34%"> op1大于op2 </td>
</tr>
<tr>
<td width="33%"> >=</td>
<td width="33%"> op1>=op2</td>
<td width="34%"> op1大于或等于op2 </td>
</tr>
<tr>
<td width="33%"> <</td>
<td width="33%"> op1<op2</td>
<td width="34%"> op1小于op2 </td>
</tr>
<tr>
<td width="33%"> <=</td>
<td width="33%"> op1<=op2</td>
<td width="34%"> op1小于或等于op2 </td>
</tr>
<tr>
<td width="33%"> ==</td>
<td width="33%">op1==op2 </td>
<td width="34%"> op1与op2相等</td>
</tr>
<tr>
<td width="33%"> !=</td>
<td width="33%">op1!=op2</td>
<td width="34%"> op1与op2不等</td>
</tr>
</table>
<p> Java中,任何数据类型的数据(包括基本类型和组合类型)都可以通过==或!=来比较是否<br>
相等(这与C、C++不同)。 <br>
<br>
关系运算的结果返回true或false,而不是C、C++中的1或0。 <br>
<br>
关系运算符常与布尔逻辑运算符一起使用,作为流控制语句的判断条件。如 <br>
<br>
<b>if( a>b && b==c) <br>
</b><br>
三、布尔逻辑运算符 <br>
<br>
布尔逻辑运算符进行布尔逻辑运算,如下表所示: <br>
</p>
<table border="1" width="80%">
<tr>
<td width="20%"> op1 </td>
<td width="20%"> op2</td>
<td width="20%"> op1&&op2</td>
<td width="20%"> op1||op2 </td>
<td width="20%"> !op1</td>
</tr>
<tr>
<td width="20%"> false</td>
<td width="20%"> false</td>
<td width="20%"> false</td>
<td width="20%"> false</td>
<td width="20%"> true </td>
</tr>
<tr>
<td width="20%"> false</td>
<td width="20%"> true</td>
<td width="20%"> false</td>
<td width="20%"> true</td>
<td width="20%"> true</td>
</tr>
<tr>
<td width="20%"> true</td>
<td width="20%">false</td>
<td width="20%"> false </td>
<td width="20%"> true</td>
<td width="20%"> false </td>
</tr>
<tr>
<td width="20%"> true</td>
<td width="20%"> true</td>
<td width="20%"> true</td>
<td width="20%"> true</td>
<td width="20%"> false </td>
</tr>
</table>
<p>·&&、‖ 为二元运算符,实现逻辑与、逻辑或。<br>
·! 为一元运算符,实现逻辑非。<br>
·对于布尔逻辑运算,先求出运算符左边的表达式的值,对或运算如果为true,则整个表达式的结果为true,不必对运算符右边的表达式再进行运算;同样,对与运算,如果左边表达式的值为false,则不必对右边的表达式求值,整个表达式的结果为false。<br>
<br>
下面的例子说明了关系运算符和布尔逻辑运算符的使用。<br>
public class RelationAndConditionOp{ <br>
public static void main( String args[] ){ <br>
int a=25,b=3; <br>
boolean d=a<b; //d=false <br>
System.out.println("a<b = "+d); <br>
int e=3; <br>
if(e!=0 && a/e>5) <br>
System.out.println("a/e = "+a/e); <br>
int f=0; <br>
if(f!=0 && a/f>5) <br>
System.out.println("a/f = "+a/f); <br>
else <br>
System.out.println("f = "+f); <br>
} <br>
} <br>
其运行结果为: <br>
C:\>java RelationAndConditionOp <br>
a<b = false <br>
a/e = 8 <br>
f = 0 <br>
<br>
注意:上例中,第二个if语句在运行时不会发生除0溢出的错,因为e!=0为false,所以就不需<br>
要对a/e进行运算。 <br>
<br>
四、位运算符 <br>
<br>
位运算符用来对二进制位进行操作,Java中提供了如下表所的位运算符: <br>
</p>
<table border="1" width="88%" height="173">
<tr>
<td width="33%" height="16">操作符</td>
<td width="26%" height="16">用法</td>
<td width="41%" height="16">描述</td>
</tr>
<tr>
<td width="33%" height="16">>></td>
<td width="26%" height="16">OP>>num</td>
<td width="41%" height="16">将OP右移num位(带符号位)</td>
</tr>
<tr>
<td width="33%" height="16"><<</td>
<td width="26%" height="16">OP<<num</td>
<td width="41%" height="16">将OP左移num位</td>
</tr>
<tr>
<td width="33%" height="16">>>></td>
<td width="26%" height="16">OP>>>num</td>
<td width="41%" height="16">将OP右移num位(高位补0)</td>
</tr>
<tr>
<td width="33%" height="13">&</td>
<td width="26%" height="13">OP1&OP2</td>
<td width="41%" height="13">将OP1和OP2按位取与</td>
</tr>
<tr>
<td width="33%" height="16">|</td>
<td width="26%" height="16">OP1|OP2</td>
<td width="41%" height="16">将OP1和OP2按位取或</td>
</tr>
<tr>
<td width="33%" height="16">^</td>
<td width="26%" height="16">OP1^OP2</td>
<td width="41%" height="16">将OP1和OP2按位异或</td>
</tr>
<tr>
<td width="33%" height="16">~</td>
<td width="26%" height="16">~OP</td>
<td width="41%" height="16">将OP按位取反</td>
</tr>
</table>
<p>
操作数只能为整型和字符型数据。 <br>
<br>
【补充】补码 <br>
Java使用补码来表示二进制数,在补码表示中,最高位为符号 ,正数的符号位为0,负数为1。<br>
对正数来说,最高位为0,其余各位代表数值本身(以二进制示),如+42的补码为00101010。 <br>
<br>
对负数而言,把该数绝对值的补码按位取反,然后对整个数 加1,即得该数的补码。如<br>
-42的补码为11010110 (00101010 按位取反11010101 +1=11010110 ) <br>
<br>
用补码来表示数,0的补码是唯一的,都为00000000。(而在原码,反码表示中,+0和-0的表示<br>
是不唯一的,可参见相应的书籍)。而且可以用111111表示-1的补码(这也是补码与原码和反<br>
码的区别)。 <br>
<br>
注意,~运算符与-运算符不同,~21≠-21。 <br>
<br>
按位与运算符& <br>
<br>
参与运算的两个值,如果两个相应位都为1,则该位的结果为1 ,否则为0。即: <br>
<br>
0 & 0 = 0,0 &1 = 0,1 & 0 = 0, 1 & 1 = 1 <br>
<br>
<font size="3"><a href="index.htm">回目录</a>
<a href="java02_07.htm">上一课</a> <a href="java02_09.htm">
下一课</a></font>
</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -