這里我先說一下運算符和操作數:
運算符是表示運算的符號,參與運算的數據稱為操作數。
算數運算符
1.一元運算符只有一個操作數(+、-、++、--四種)
如:+x表示x取正數,++x或x++表示x加1
2.二元運算符有2個操作數(+、-、*、/(除)、%(求余)五種)
如:p1+p2表示兩數相加
關系運算符
有兩個操作,數關系運算符(>、<、>=、<=、==、!=)是布爾類型,表達式的結果為true或false
如:p1>p2(p1=1,p2=3)結果為false
布爾邏輯運算符
1.邏輯與&&、邏輯或||是二元運算符(短路運算)
如:x>0&&y<4若x=-1,y=3,在邏輯與中,x>0不成立則整個表達式都不成立,結果為false,不用在判斷y<4是否成立了。
x>0||y<4若x=2,y=5,在邏輯與中,x>0成立則整個表達式都成立,結果為true,不用在判斷y<4是否成立了。
2.邏輯非!是一元運算符。
位運算符
位運算對二進制進行操作。
1.~按位取反,如:~11001010→00110101
2.&按位與,如:0&0=0,0&1=0,1&1=1
按位與可以用來屏蔽特定的位,對特定的位清零。 int theFourthBit=i&8; (8=00001000),在變量i的二進制中除了右邊第四位沒有變化以外,其余位全部被清零。
也可以用來取某個數中某些指定的位,如:取整數變量i的第五位,可以這樣表示int theFifthBit=i&16 (16=00010000)。
3.|按位或,如:0|0=0,0|1=1,1|1=1
按位或和可以將某些位變為1,如:將整型變量i的第四位和第五位換成1,可以用語句(int setFourthAndFifthBit=i | 24; 來實現(24=00011000)
4.^按位異或,如:0^0=0,0^1=0,1^0=1,1^1=0
可以實現兩個數的交換,而不使用臨時變量,如:交換兩個整數a ,b的值,可以用下列語句實現:
int a=15,b=24;//(15=00001111,24=00011000)
a=a^b;//a=23(00010111)
b=b^a;//b=15
a=a^b;//a=24
5.移位運算符(<<、>>、>>>)
這里要先了解補碼的概念:Java使用補碼來表示二進制數,在補碼表中,最高位是符號位,正數用0表示,負數用1表示。
注意:如何得到一個負數的補碼?這里我用-1來舉例:把負數-1絕對值的補碼(|-1|的補碼及1的補碼(00000001))按位取反(得到11111110),然后對整個數加1,就得到-1的補碼11111111了。
>>算術右移,如:a=11001101,則a>>2=11110011 (移到右端的低位被舍去,最高位的值移入的還是原來高位的那個值)
右移一位相當於除以2取商,而且用右移實現除法比除法速度要快。
<<算數左移,如:a=00001111,則a<<2=00111100(右邊補0)高位左移后溢出,舍棄不起作用。
在不產生溢出的情況下,左移1位相當於承2,左移實現乘法比乘法運算速度要快。
>>>邏輯右移(無符號右移)如:a=11010011,則b>>>2=00110100
賦值運算符
=復制運算涉及到類型的轉換,如:
byte b=12;
int i=b;//byte自動轉換為int類型
int a=22;
byte b=(byte) a;//int強制轉換為byte類型
條件運算符
三元運算符? : 如:p1>p2?a:b; 若p1>p2成立,結果取a,不成立就取b。