======================================
===>>> 第三章 Java的運算符和表達式 <<<===
======================================
§3-1 運算符
一、對於C/C++來說,Java中的運算符號並沒有做多大改動,在稱謂上面,由C/C++裏面的“目”改成
了“元”。比如說:在C++裏面叫做“三目運算符”的?:,在Java裏面叫做“三元運算符”。
同樣,Java是允許進行自加(i++或者++i)和自減(j--或者--j)運算的。
二、Java的運算符歸納如下:
1、算術運算符 ( + 、- 、* 、/ 、% 、++ 、-- )
2、關係運算符 ( > 、< 、>= 、<= 、== 、!= )
3、布爾邏輯運算符 ( ! 、&& 、|| )
4、位運算符 ( >> 、<<、>>> 、& 、| 、^ 、~ )
5、賦值運算符 ( = 、及其擴展賦值運算符如:+= )
6、條件運算符 ( ?: )
7、其它(包括分量運算符·,下標運算符[],實例運算符instance of,內存分配運算符new,強制
類型轉換運算符(類型),方法調用運算符()等)
§3-2 算術運算符
一、一元算術運算符
運算符 用法 描述
+ +op 正值
- -op 負值
++ ++op,op++ 加1
-- --op,op-- 減1
二、二元算術運算符
運算符 用法 描述
+ op1+op2 加
- op1-op2 減
* op1*op2 乘
/ op1/op2 除
% op1%op2 取模(求餘)
Java對加運算符進行了擴展,使它能夠進行字符串的連接,如"abc"+"de",得到串"abcde"。
與C/C++不同,對取模運算符%來說,其操作數可以爲浮點數37.2%10=7.2。
下面的例子說明了算術運算符的使用:
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-3 關係運算符
運算符 用法 返回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不等
和C/C++相比,Java中的何數據類型的數據(包括基本類型和組合類型)都可以通過“==”或“!=”
來比較是否相等。
關係運算的結果返回true或false,而不是C/C++中的1或0。
關係運算符常與布爾邏輯運算符一起使用,作爲流控制語句的判斷條件。如:if( a>b && b==c)
§ 3-4 布爾邏輯運算符
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-5 位運算符
位運算符用來對二進制位進行操作,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,例如:
0010101
~
1101010
注意,~運算符與-運算符不同,~21≠-21。
3-4-3 按位與運算符&
參與運算的兩個值,如果兩個相應位都爲1,則該位的結果爲1,否則爲0。即:
0 & 0 = 0 ;0 & 1 = 0 ;1 & 0 = 0 ;1 & 1 = 1 ;
第四章 Java的流控制