posts - 24,  comments - 29,  trackbacks - 0

                  Java語言中的表達式是由運算符與操作數組合而成的,所謂的運算符就是用來做運算的符號。
                  在Java中的運算符,基本上可分為算術運算符、關系運算符、邏輯運算符、位運算符、賦值運算符、轉型運算符等。

          一、算術運算符
                 所謂算術運算符,也就是我們數學中學到的加、減、乘、除等運算。這些操作可以對幾個不同類型的數字進行混合運算,為了保證操作的精度,系統在運算的過程中會做相應的轉換。
                1、數字精度
                 所謂數字精度,也就是系統在做數字之間的算術運算時,為了盡最大可能地保持計算機的準確性,而自動進行相應的轉換,將不同的數據類型轉變為精度最高的數據類型。規則如下:
                1)當使用運算符把兩個操作數結合到一起時,在進行運算前兩個操作數會轉化成相同的類型。
                2)兩個操作數中有一個是double類型的,則另一個將轉換成double型。
                3)兩個操作數中有一個是float類型的,則另一個將也轉換成float型。
                4)兩個操作數中有一個是long類型的,則另一個將也轉換成long型。
                5)任何其它類型的操作,兩個操作數都要轉換成int類型。
                2、整數型運算(int型)
                 對于int型的相關操作,加、減、乘的結果都是非常容易理解的,重點講一下除(/)的運算。
                 兩個整數相除的結果是整數,這一點與數學中是不同的,在Java中,兩個整數相除的結果類似于數學中的求模運算。整除的余數是用%表示,例如15 / 2 = 7,而不是7.5,15 % 2 = 1。我們用程序驗證一下:

          /*兩個整數相除及求余數*/

          public class Divide
          {
             public static void main(String[] args)
             {
                int a = 15;
                int b = 2;
                double c = 2;
                System.out.println(a + "/" + b + "=" + (a / b));
                System.out.println(a + "%"+ b + "=" + (a % b));
                System.out.println(a + "/" + c + "=" + (a / c));
                System.out.println(a + "%" + c + "=" + (a % c));
              }
          }

          輸出結果:
                           15 / 2 = 7
                           15 % 2 = 1
                           15 / 2.0  =  7.5
                           15 % 2.0 = 1.0

                  3、自增和自減運算符
                  在循環與控制中,我們經常會用到類似于計數器的運算,它們的特征是每次的操作都是加1或減1。在Java中提供了自增、自減運算符,X++使變量X的當前值每次增加1,而X--是自減運算符,每次操作使當前X的值減1。例如:

          /*測試自增、自減操作*/

          public class SelfAction
          {
             public static void main(String[] args)
             {
               int x = 10;
               int a = x+ x++;
               System.out.println("a =" + a);
               System.out.println("x =" + x);
               int b = x + ++x;
               System.out.println("b =" + b);
               System.out.println("x =" + x);
               int c = x + x--;
               System.out.println("c =" + c);
               System.out.println("x =" + x);
               int d = x + --x;
               System.out.println("d =" + d);
               System.out.println("x =" + x);
             }

          輸出結果:
                           a = 20
                           x = 11
                           b = 23
                           x = 12
                           c = 24
                           x = 11
                           d = 21
                           x = 10

          二、關系運算符
                  Java具有完美的關系運算符。這些關系運算符基本上同數學中的關系運算符是一致的。“>”大于、“<”小于、“>=”大于等于、“<=”小于等于、“==”等于、“!=”不等于。例如:

          /*關系運算符測試*/

          public class RelationTest
          {
             public static void main(String[] args)
             {
               boolean x, y, z;
               int a = 15;
               int b = 2;
               double c =15;
               x = a > b;  //true;
               y = a < b;  //false;
               z = a != b;  //true;
               System.out.println("x =" + x);
               System.out.println("y =" + y);
               System.out.println("z =" + z);
             }
          }
          輸出結果:
                           x = true
                           y = false
                           z = true

          三、邏輯運算符
                  在Java語言中有三種邏輯運算符,它們是NOT(非,以符號“!”表示)、AND(與,以符號“&&”表示、)OR(或,以符號“||”表示)。
                  1、NOT運算符
                   NOT運算符是用來表示相反的意思。
                                  NOT邏輯關系值表
                                    

          A

          !A

          true

          false

          false

          true


                   2、AND運算符
                   AND運算符表示“與”的意思,也就是和的意思。
                                 AND邏輯關系值表

          A

          B

          A&&B

          false

          false

          false

          true

          false

          false

          false

          true

          false

          true

          true

          true


                   3、OR運算符
                   OR運算符是用來表示“或”就像我們日常生活中理解的一樣,兩者只要有一個為“真”,結果就為“真”。
                               OR邏輯關系值表

          A

          B

          A||B

          false

          false

          false

          true

          false

          true

          false

          true

          true

          true

          true

          true


          /*邏輯運算符測試*/

          public class LogicSign
          {
             public static void main(String[] args)
             {
               boolean x, y, z, a, b;
               a = 'a' > 'b';
               b = 'R' != 'r';
               x = !a;
               y = a && b;
               z = a || b;
               System.out.println("x =" + x);
               System.out.println("y =" + y);
               System.out.println("z =" + z);
             }
          }
          輸出結果:
                           x = true
                           y = false
                           z = true

                 4、“短路”現象
                 在運用邏輯運算符進行相關的操作時,我們會遇到一種很有趣的現象;短路現象。
                 對于true && false根據我們的講述,處理的結果已經是false了,也就是說無論后面是結果是“真”還是“假”,整個語句的結果肯定是false了,所以系統就認為已經沒有必要再進行比較下去了。也就不會再執行了,這種理象就是我們所說的短路現象。

          四、位運算符
                    所有的數據、信息在計算機中都是以二進制形式存在的。我們可以對整數的二進制位進行相關的操作。這就是按位運算符,它主要包括:位的“與”、位的“或”、位的“非”、位的“異或”。
                  1)位的“與”,用符號“&”表示,它屬于二元運算符。 與位運算值表:

          A

          B

          A&B

          1

          1

          1

          1

          0

          0

          0

          1

          0

          0

          0

          0


                   2)位的“或”用符號“|”表示,它屬于二元運算符。。   或位運算值表:

          A

          B

          A|B

          1

          1

          1

          0

          1

          1

          1

          0

          1

          0

          0

          0


                    3)位的“非”,用符號“~”表示,它是一元運算符,只對單個自變量起作用。它的作用是使二進制按位“取反”。 非位運算值表:

          A

          ~A

          1

          0

          0

          1


                     4)位的“異或”,用符號“^”表示,它屬于二元運算符。異或位運算值表:

          A

          B

          A^B

          1

          1

          0

          0

          1

          1

          1

          0

          1

          0

          0

          0



          /*測試位的四種運算*/

          public class BitOperation
          {
           public static void main(String[] args)
           {
            int a = 15;
            int b = 2;
            int x = a & b;
            int y = a | b;
            int z = a ^ b;
            System.out.println(a + "&" + b + "=" + x);
            System.out.println(a + "|" + b + "=" + y);
            System.out.println(a + "^" + b + "=" + z);
           }
          }

          輸出結果:
                            15 & 2 = 2
                            15 | 2 = 15
                            15 ^ 2 = 13

          五、移位運算符
                  移位運算符的面向對象也是二進制的“位”。可以單獨用移位運算符來處理int型數據。它主要包括:左移位運算符(<<)、“有符號”右移位運算符(>>)、“無符號”右移運算符(>>>)
                  1)左移位運算符
                   左移位運算符,用符號“<<”表示。它是將運算符左邊的對象向左移運動運算符右邊指定的位數(在低位補0)。
                  2)“有符號”右移運算符
                  “有符號”右移運算符,用符號“>>”表示。它是將運算符左邊的運算對象向右移動運算符右側指定的位數。它使用了“符號擴展”機制,也就是說,如果值為正,在高位補0,若為負,則在高位補1。
                  3)“無符號”右移運算符
                  “無符號”右移運算符,用符號“>>>”表示。它同“有符號”右移運算符的移動規則是一樣的,惟一的區別就是:“無符號”右移運算符,它采用了“零擴展”,也就是說,無論值為正負,都在高位補0。

          /*移位運算符測試*/

          public class BitMotion
          {
             public static void main(String[] args)
             {
               int a = 15;
               int b = 2;
               int x = a << b;
               int y = a >> b;
               int z = a >>> b;
               System.out.println(a + "<<" + b + "=" + x );
               System.out.println(a + ">>" + b + "=" + y);
               System.out.println(a + ">>>" + b + "=" + z);
              }
          }
          輸出結果:
                           15 << 2 =60
                           15 >> 2 = 3
                           15 >>> 2 =3

          六、賦值運算符
                  賦值運算符是程序中最常用的運算符了,只要有變量的聲明,就要有賦值運算。如a = 3;這里的a我們都知道是變量名,根據前面對變量的定義,我們可以知道這里的a實際上就是內存空間的一個名字,它對應的是一段內存空間,一在要在這個空間放入3這個值。這個放入的過程就實現了賦值的過程。
                        賦值運算一覽表

          運算符

          一般表示法

          Java語言表示法

          +=

          a = a + b

          a += b

          -=

          a = a - b

          a -= b

          *=

          a = a * b

          a *=b

          /=

          a=a / b

          a /= b

          %=

          a = a % b

          a %= b

          >>=

          a = a >> b

          a >>= b

          >>>=

          a = a >>> b

          a >>>= b


          七、三元運算符
                  三元運算符比較罕見,因為它有三個運算對象,但它也確實屬于運算符的一種,因為它最終也是產生一個值。它也可以轉化為條件判斷語句,只不過這種處理方式更簡潔、明了。
                  它的運算過程是這樣的:
                   如果“布爾表達式”的結果是“true”,就返回值0;
                   如果“布爾表達式”的結果是“false”,就返回值1;
                   它的返回值做為最終結果返回。

          八、逗號運算符
                  在Java中,逗號運算符的惟一使用場所就是在for循環語句中。

          九、字符串運算符
                  “+”號這個運算符,在Java中有一項特殊的用法,它不僅起到連接不同的字符串,還有一種隱式的轉型功能。

          十、轉型運算符
                  轉型運算符可以說是一種特殊的運算符,它是將一種類型的數據或對象,強制轉變為另一種類型。

          /*強制轉型測試*/

          public class TypeTran
          {
             public static void main(String[] args)
             {
               int x ;
               double y;
               x = (int)22.5 + (int)34.7;  //強制轉型可能引起精度丟失
               y = (double)x;
               System.out.println("x = " + x);
               System.out.println("y = " + y);
             }
          }
          輸出結果:
                            x = 56
                            y = 56.0
          分析:
                    可以發現,由于強制轉型,使數據精度丟失。系統會忽略強制轉型的檢查。所以對于強制轉型,必須清楚轉型是否可行。

                   最后總結一下運算符的優先級

          運算符

          優先級

          括號()

          1最高

          ++、--

          2

          ~、!

          3

          *、/、%

          4

          +、-(減)

          5

          <<、>>、>>>

          6

          >、<、>=、<=

          7

          ==、!=

          8

          &

          9

          ^

          10

          |

          11

          &&

          12

          ||

          13

          ? :

          14


           

          posted on 2007-05-14 14:24 心隨Wǒ動 閱讀(16915) 評論(8)  編輯  收藏

          FeedBack:
          # re: Java運算符
          2007-05-14 16:22 | 我心依舊
          前三種運算符都很重要,很常用.  回復  更多評論
            
          # re: Java運算符
          2007-05-14 19:32 | 劉甘泉
          邏輯運算符替換if else還是很常用的  回復  更多評論
            
          # re: Java運算符[未登錄]
          2007-07-18 13:13 | j
          按位異或和邏輯異或有什么區別阿?  回復  更多評論
            
          # re: Java運算符
          2009-07-25 11:35 | Wardon
          @j
          很明顯啊,按位異或對象是二進制位,邏輯或對象是布爾值  回復  更多評論
            
          # re: Java運算符
          2013-01-30 16:11 | commonsLok
          頭暈了。。。  回復  更多評論
            
          # re: Java運算符
          2013-03-20 21:40 | 4455
          8898  回復  更多評論
            
          # re: Java運算符[未登錄]
          2013-11-02 15:19 | Daniel
          @Wardon
          不是。 按位異或用于布爾值返回的也是布爾值,差別主要在于,邏輯異或會短路,而按位異或不會。
            回復  更多評論
            
          # re: Java運算符
          2014-03-24 16:45 | 1336620740@qq.com
          ~的作用和反碼一樣的嗎?還是相當于取5的補碼作用是一樣的?lz

          比如~5
            回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2014年3月>
          2324252627281
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          QQ群:9028409
          QQ:29850994
          點擊這里給我發消息

          留言簿(2)

          隨筆檔案

          積分與排名

          • 積分 - 31455
          • 排名 - 1348

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 湘潭县| 敦化市| 乌拉特前旗| 洮南市| 惠安县| 定边县| 米脂县| 上饶县| 通渭县| 喀喇| 宿迁市| 治县。| 安乡县| 上杭县| 博罗县| 汕尾市| 岐山县| 织金县| 县级市| 南部县| 达州市| 沅陵县| 蛟河市| 台南县| 策勒县| 兰州市| 金山区| 荥经县| 广昌县| 普兰店市| 剑河县| 东乌珠穆沁旗| 柏乡县| 营山县| 唐山市| 芜湖县| 连平县| 施甸县| 保山市| 共和县| 旬阳县|