Java運算符

1.運算符

1.1算術運算符

+(加)  -(減)  *(乘)  /(除)  %(取餘)java

 

如:數組

int a = 5+4//a=9工具

int b = a*2//b=18ui

int c = b/4//c=4spa

int d = b-c//d=14htm

int e = -d//e=-14對象

int f = e%4//f=-2接口

1.2賦值運算符

=   +=   -=  *=  /=  %=  <<=  >>=   &=  |=  ^=ip

1.3短路運算符

與(&&)、或(||get

 

&& :它表示的是:當左邊的表達是是false的話,右邊的表達式將不進行運算

||   :表示:當左邊的表達是爲true的話,右邊的表達式將不進行運算

1.4關係運算符

等於符號:==     不等於符號:!=           大於符號:>

小於符號:<       大於等於符號:>=        小於等於符號:<= 

 

例如:

9.5<8;        //false

8.5<=8.5;     //true

'A' < 'a');     //false

1.5條件運算符(三目運算符)

?:  

 

例如:a>b?true:false 說明:當a大於b的時候,爲true(也就是冒號以前的值),不然爲false;這整個運算符包括一個關係運算符(能夠是「>」"<""!="等等),一個,一個,冒號先後須要有兩個表達式或者是值或者是對象。

 

1.6自加減運算符

++(自增)  - -(自減)

 

例如:

int i = 0;       //i=0
int j = i++;     //j=0
int k = --i;     //k=0

1.7正負號運算符

+(取正)  -(取負)

1.8位移運算符

<< 帶符號左移       >>帶符號右移           >>> 無符號右移

左移運算符:

1)它的通用格式以下所示:
value << num
num 指定要移位值value 移動的位數。
左移的規則只記住一點:丟棄最高位,0補最低位
若是移動的位數超過了該類型的最大位數,那麼編譯器會對移動的位數取模。如對int型移動33位,實際上只移動了332=1位。

2)運算規則
按二進制形式把全部的數字向左移動對應的位數,高位移出(捨棄),低位的空位補零。
當左移的運算數是int 類型時,每移動1位它的第31位就要被移出而且丟棄;
當左移的運算數是long 類型時,每移動1位它的第63位就要被移出而且丟棄。
當左移的運算數是byte short類型時,將自動把這些類型擴大爲 int 型。

3)數學意義
在數字沒有溢出的前提下,對於正數和負數,左移一位都至關於乘以21次方,左移n位就至關於乘以2n次方

4)計算過程:
例如:3 <<2(3int)
1)把3轉換爲二進制數字0000 0000 0000 0000 0000 0000 0000 0011
2)把該數字高位(左側)的兩個零移出,其餘的數字都朝左平移2位,
3)在低位(右側)的兩個空位補零。則獲得的最終結果是0000 0000 0000 0000 0000 0000 0000 1100
轉換爲十進制是12

移動的位數超過了該類型的最大位數,
若是移進高階位(3163位),那麼該值將變爲負值。下面的程序說明了這一點:

// Left shifting as a quick way to multiply by 2.
public class MultByTwo {
public static void main(String args[]) {
   int i;
   int num = 0xFFFFFFE;
   for(i=0; i<4; i ) {
       num = num << 1;
     System.out.println(num);
   }
  }
}

該程序的輸出以下所示:

536870908
1073741816
2147483632
-32
注:n位二進制,最高位爲符號位,所以表示的數值範圍-2^(n-1) ——2^(n-1) -1,因此模爲2^(n-1)

右移運算符

右移運算符<<使指定值的全部位都右移規定的次數。

1)它的通用格式以下所示:

value >> num

num 指定要移位值value 移動的位數。

右移的規則只記住一點:符號位不變,左邊補上符號位

2)運算規則:

按二進制形式把全部的數字向右移動對應的位數,低位移出(捨棄),高位的空位補符號位,即正數補零,負數補1

當右移的運算數是byte short類型時,將自動把這些類型擴大爲 int 型。

例如,若是要移走的值爲負數,每一次右移都在左邊補1,若是要移走的值爲正數,每一次右移都在左邊補0,這叫作符號位擴展(保留符號位)(sign extension ),在進行右移

操做時用來保持負數的符號。

 

3)數學意義

右移一位至關於除2,右移n位至關於除以2n次方。

4)計算過程

11 >>2(11int)

1)11的二進制形式爲:0000 0000 0000 0000 0000 0000 0000 1011

2)把低位的最後兩個數字移出,由於該數字是正數,因此在高位補零。

3)最終結果是0000 0000 0000 0000 0000 0000 0000 0010

轉換爲十進制是3

35 >> 2(35int)

35轉換爲二進制:0000 0000 0000 0000 0000 0000 0010 0011

把低位的最後兩個數字移出:0000 0000 0000 0000 0000 0000 0000 1000

轉換爲十進制: 8

5)在右移時不保留符號的出來

右移後的值與0x0f進行按位與運算,這樣能夠捨棄任何的符號位擴展,以便獲得的值能夠做爲定義數組的下標,從而獲得對應數組元素表明的十六進制字符。

例如

public class HexByte {

public static public void main(String args[]) {

char hex[] = {

'0', '1', '2', '3', '4', '5', '6', '7',

'8', '9', 'a', 'b', 'c', 'd', 'e', 'f''

};

byte b = (byte) 0xf1;

System.out.println("b = 0x" hex[(b >> 4) & 0x0f] hex[b & 0x0f]);}}

(b >> 4) & 0x0f的運算過程:

b的二進制形式爲:1111 0001

4位數字被移出:0000 1111

按位與運算:0000 1111

轉爲10進制形式爲:15

b & 0x0f的運算過程:

b的二進制形式爲:1111 0001

0x0f的二進制形式爲:0000 1111

按位與運算:0000 0001

轉爲10進制形式爲:1

因此,該程序的輸出以下:

b = 0xf1

無符號右移

無符號右移運算符>>>

它的通用格式以下所示:

value >>> num

num 指定要移位值value 移動的位數。

無符號右移的規則只記住一點:忽略了符號位擴展,0補最高位

無符號右移運算符>>> 只是對32位和64位的值有意義

1.9邏輯運算符

&&(短路與)  ||(短路或)  !(非) &(與)  |(或)

 

!:這個沒說的就是非運算符

& :不管左邊的表達式結果是:true仍是false,右邊的表達式都會進行運算

|  :表示不管左邊的表達式結果是:true仍是false,右邊的表達式都將進行運算

&& :它表示的是:當左邊的表達是是false的話,右邊的表達式將不進行運算

||   :表示:當左邊的表達是爲true的話,右邊的表達式將不進行運算

1.10位運算符

  與(&)、非(~)、或(|)、異或(^

 

&:雙目運算符,運算時均把運算數轉換爲二進制再作比較,規則:當相同的位上均爲1時結果爲1,不然結 果爲0.如:1010&1101,轉爲二進制:1111110010&10001001101,比較結果爲:1000000轉爲十進制: 64。因此1010&1101=64

| :當兩邊操做數的位有一邊爲1時,結果爲1,不然爲0。如1100|1010=1110

~01,10

^:兩邊的位不一樣時,結果爲1,不然爲0.1100^1010=0110

1.11new

new 關鍵字用來在堆中申請空間

 

如:str = new String("Hello!");

1.12instanceof

運算符雙目運算符,左面的操做元是一個對象,右面是一個類或接口。當左面的對象是右面的類(或右邊類的子孫類)建立的對象、或者是右邊接口的實現類(或實現類的子孫類)的對象時,該運算符運算結果是true,不然是false

1.13()

()用於強制類型轉換和改變執行優先權;如:

int i=1;

long l=(long)i;

注意:Java語言和解釋器限制使用強制和轉換,以防止出錯致使系統崩潰。整數和浮點數運算符間能夠來回強制轉換,但整數不能強制轉換成數組或對象。對象不能被強制爲基本類型。

Java中整數運算符在整數運算時,若是操做數long類型,則運算結果是long類型,不然爲int類型,毫不會是byteshortchar型。這樣,若是變量i被聲明爲shortbytei+1的結果會是int。若是結果超過該類型的取值範圍,則按該類型的最大值取模。

1.14[ ]

[]用於經過其內部下標取出數組內對應值

1.15.

.Java中,用來區別包名和類名,以及區別類名與它們的公共方法和屬性名字。

 

如今看下面的語句:

int[ ] array = { 4, 99, 32, 11, 0, 75, 6 };

java.util.Arrays.sort(array);

這裏有個被Arrays工具類的sort方法調用的整數數組。點符號把包名(java.util)和類名(Arrays)區分開來,也把Arrays類名和sort方法名分離開了。

 

 

 

 

2優先級與結合性

優先級

運算符

結合性

1

()[].

從左向右

2

!+(正)-(負)~ ++ --

從右向左

3

* / %

從左向右

4

+(加)-(減)

從左向右

5

<<      >>      >>>   

從左向右

6

<     <=     >     >=     instanceof

從左向右

7

==    !=

從左向右

8

&(按位與)

從左向右

9

^

從左向右

10

|

從左向右

11

&&

從左向右

12

||

從左向右

13

?:

從右向左

14

=   +=  -=   *=   /=   %=   &=  |=   ^=   ~=  <<=  >>=  >>>=

從右向左

相關文章
相關標籤/搜索