posts - 24,  comments - 29,  trackbacks - 0

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

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

          /*兩個整數(shù)相除及求余數(shù)*/

          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));
              }
          }

          輸出結(jié)果:
                           15 / 2 = 7
                           15 % 2 = 1
                           15 / 2.0  =  7.5
                           15 % 2.0 = 1.0

                  3、自增和自減運算符
                  在循環(huán)與控制中,我們經(jīng)常會用到類似于計數(shù)器的運算,它們的特征是每次的操作都是加1或減1。在Java中提供了自增、自減運算符,X++使變量X的當(dāng)前值每次增加1,而X--是自減運算符,每次操作使當(dāng)前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);
             }

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

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

          /*關(guān)系運算符測試*/

          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);
             }
          }
          輸出結(jié)果:
                           x = true
                           y = false
                           z = true

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

          A

          !A

          true

          false

          false

          true


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

          A

          B

          A&&B

          false

          false

          false

          true

          false

          false

          false

          true

          false

          true

          true

          true


                   3、OR運算符
                   OR運算符是用來表示“或”就像我們?nèi)粘I钪欣斫獾囊粯樱瑑烧咧灰幸粋€為“真”,結(jié)果就為“真”。
                               OR邏輯關(guān)系值表

          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);
             }
          }
          輸出結(jié)果:
                           x = true
                           y = false
                           z = true

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

          四、位運算符
                    所有的數(shù)據(jù)、信息在計算機中都是以二進制形式存在的。我們可以對整數(shù)的二進制位進行相關(guān)的操作。這就是按位運算符,它主要包括:位的“與”、位的“或”、位的“非”、位的“異或”。
                  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);
           }
          }

          輸出結(jié)果:
                            15 & 2 = 2
                            15 | 2 = 15
                            15 ^ 2 = 13

          五、移位運算符
                  移位運算符的面向?qū)ο笠彩嵌M制的“位”。可以單獨用移位運算符來處理int型數(shù)據(jù)。它主要包括:左移位運算符(<<)、“有符號”右移位運算符(>>)、“無符號”右移運算符(>>>)
                  1)左移位運算符
                   左移位運算符,用符號“<<”表示。它是將運算符左邊的對象向左移運動運算符右邊指定的位數(shù)(在低位補0)。
                  2)“有符號”右移運算符
                  “有符號”右移運算符,用符號“>>”表示。它是將運算符左邊的運算對象向右移動運算符右側(cè)指定的位數(shù)。它使用了“符號擴展”機制,也就是說,如果值為正,在高位補0,若為負,則在高位補1。
                  3)“無符號”右移運算符
                  “無符號”右移運算符,用符號“>>>”表示。它同“有符號”右移運算符的移動規(guī)則是一樣的,惟一的區(qū)別就是:“無符號”右移運算符,它采用了“零擴展”,也就是說,無論值為正負,都在高位補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);
              }
          }
          輸出結(jié)果:
                           15 << 2 =60
                           15 >> 2 = 3
                           15 >>> 2 =3

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

          運算符

          一般表示法

          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


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

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

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

          十、轉(zhuǎn)型運算符
                  轉(zhuǎn)型運算符可以說是一種特殊的運算符,它是將一種類型的數(shù)據(jù)或?qū)ο螅瑥娭妻D(zhuǎn)變?yōu)榱硪环N類型。

          /*強制轉(zhuǎn)型測試*/

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

                   最后總結(jié)一下運算符的優(yōu)先級

          運算符

          優(yōu)先級

          括號()

          1最高

          ++、--

          2

          ~、!

          3

          *、/、%

          4

          +、-(減)

          5

          <<、>>、>>>

          6

          >、<、>=、<=

          7

          ==、!=

          8

          &

          9

          ^

          10

          |

          11

          &&

          12

          ||

          13

          ? :

          14


           

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

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

          比如~5
            回復(fù)  更多評論
            

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


          網(wǎng)站導(dǎo)航:
           
          <2014年3月>
          2324252627281
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          QQ群:9028409
          QQ:29850994
          點擊這里給我發(fā)消息

          留言簿(2)

          隨筆檔案

          積分與排名

          • 積分 - 31445
          • 排名 - 1349

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 乐清市| 彭阳县| 香港| 平顶山市| 昌图县| 杭州市| 馆陶县| 宜兰县| 嘉定区| 富平县| 定边县| 宁强县| 扎兰屯市| 得荣县| 家居| 湖州市| 哈尔滨市| 望都县| 嘉义县| 宁蒗| 惠州市| 寿宁县| 九江县| 隆尧县| 南川市| 新乡县| 宁城县| 封开县| 大厂| 平安县| 靖边县| 玉龙| 公主岭市| 霍城县| 高邮市| 江永县| 桦南县| 金乡县| 绥化市| 闽清县| 定陶县|