posts - 7,  comments - 0,  trackbacks - 0
           

          Java 語法介紹(二):運算符

           

          1:優先級

           優先級是指同一式子中多個運算符被執行和次序,同一級里的操作符具有相同的優先級,相同優先級得操作符號相遇是,根據結合性決定運算次序,下面從高到低的優先級列出了運算符。同一行中的運算符優先級相同。


            .  []  ()   結合性從左到右
            ++  --  !  ~   結合性從左到右
            *  /  %   結合性從左到右
            +  -   結合性從左到右
            <<  >>  >>>   結合性從左到右
            <  >  <=  >=   結合性從左到右
            ==  !=   結合性從左到右
            &   結合性從左到右
            ^   結合性從左到右
            &&   結合性從左到右
            ||   結合性從左到右
            ?:   結合性從右到左
            =   結合性從右到左

            例如對于表達式:a=b+c*d/(c^d),因為括號優先級最高,所以先計算c^d,接著是c*d,然后除以c^d,最后,把上述結果與b的和存儲到變量a中。

          2
          :整型運算符

            整型運算符按操作數的多少可分為一元和二元兩類,一元運算符一次對一個變量進行操作,二元運算符一次對兩個變量進行操作。對于運算來說,如果有一個變量或操作數是長整型的,那么結果就肯定是長整型的,否則即使操作數還沒有確定是字節型、短整型或字符型,運算結果都是整型,下表是一元運算符。

          運算符 實際操作 例子
            -   改變整型數符號   -i
            ~   位運算:非   ~i
            ++   加1   i++
            --   減1   i--

          注:一元取反運算符(-)用來改變整數的正負號,逐位求反把所變量所有是1的位變成0,是0的位變成1,加加和減減(++,--)把變量的值加1或減1
            以下是一個具體例子:

            int i=0;
            int j=1;
            for (i=1;i<10;i++)
            {
            j--;
            System.out.println(i+""+j+"");
            }

            一元運算符執行的方式是改變它們所作用的變量的值,對一元取反和逐位求反來說,變量的值并不改變,而對加和減運算(++,--)來說,就量的值被改變了,例如:

              int i=10,j=10,k=10,l=10;
              System.out.println(i+""+j+""+k+""+l+"");
              j++;
              i--;
              ~k;
              -l;
              System.out.println(i+""+j+""+k+""+l+"");

            注意:ji被改變并打印出它們的新值,可是kl仍然為原來的數值,當在復合表達式中使用一元取反和逐位求余運算時,你實際上是在用一個臨時存貯操作數的新值。

           ?。停仁乔爸眠\算符也是后置運算符,這就是說,它們既可以放在操作數前面(++x),也可以放在后面(x++),如果它們被用在復合語句中如:

              i=x++; i=++x;
            那么第一個語句中x把值賦給i以后再加1,而第二個語句先把x1,再把新的x值賦給i。
            整型運算符的第二種類型是二元運算符,這種運算并不改變操作數的值,而是返回一個必須賦給變量的值,下表列出了二元運算符。

          運算符 實際操作 例子
            +   加運算   a+b
            -   減運算   a-b
            *   乘運算   a*b
            /   除運算   a/b
            %   取模運算   a%b
            &   與運算   a&b
            |   或運算   a|b
            ^   異或運算   a^b
            <<   左移   a<<b
            >>   右移   a>>b
            >>>   右移   a>>>b


          注意:>>>>>的基本功能都是右移,但>>是用符號位來填充右移后所留下的空位,而>>>則是用零來填充右移后所留下的空位。

            還有一類運算,它們形如:j-=i,這里-=是二元運算-和賦值運算=的復合運算,它等價于j=j-i,這種復合方式適用于所有的二元運算符。

            這里有幾點關于整型運算進一步說明,首先,整數除法向靠近0的方向取整;其次,如果你除以0或者對0取模,程序就會在運行時被強行中止,如果你的運算結果超出最小極限,或者說是下溢,結果將為0,如果超出了最大極限,就將會導致結果的回繞。

          3
          :布爾運算符

            另外還有一些運算符能產生布爾類型的結果,我們把它們稱為布爾運算符,下表列出了這些運算符。

          運算符 實際操作 例子
          <
          小于 a<b
          >
          大于 a>b
          <=
          小于等于 a<=b
          >
          大于等于 a>=b
          ==
          等于 a==b
          !=
          不等于 a!=b

            在這里要指出的是相等運算符==可能會給你帶來許多麻煩,很多人在比較兩個值時往往錯用了等號=,以致于變成了賦值操作,所以在編程中一定要注意你在比較數值時用的是==。布爾類型本身還有幾個邏輯運算符,它們可以對布爾類型的數據進行運算:!,&&,//

            其實如果你把布爾類型的值true等效地看成1,false看成0,那么對于相同的運算符,整型運算的法則對布爾類型也是適用的。

            布爾運算符中還有一種三元運算符,它的格式如下:

            Operand ? Statement1:Statement2
            在這個式子中,先計算Operand的真假,若為真,則執行Statement1,若為假,則執行Statement2。下面的代碼給出了這種運算的一個例子:

            (a>b)?a:b;
            這個表達式將返回ab中較大的那個數值。

          4
          :浮點型運算符

            傳統的浮點型二元運算除了賦值運算符(+=,-=.*=./)取模(%)和取模賦值(%=0)使浮點數值等價于整數除法,同樣,++--使變量的值增加或減小1

            同整型變量相似,結果被放在最大長度的類型里,如果運算包括兩個浮點類型,結果也是個浮點類型,如果有一個或幾個是雙精度浮點型,結果就是雙精度浮點型,當你使用關系運算符:><、>=、<=、==!=時,注意浮點變量與整型的不同,只有a==b成立并不能說明a<ba>b不成立,這是因為浮點類型數值次序同整型不同,當你寫程序,對浮點型數值進行假設時要小心,浮點型數值也包括inf,代表無窮大,溢出產生無窮大inf,下溢產生0。

          5
          :字符串運算符

            +運算符可以把字符串并置起來,如果哪一個操作數不是字符串,在并置之前它會被轉換成字符串,另外,+=運算符把兩個字符串并置的結果放進第一個字符串里,在前面的例子里,當你想把幾項打印在同一行里時使用的是+運算符,試著在解釋器里用System.out.println+運算符來造成不同的組合輸出。

          posted on 2007-09-08 18:39 Gavin_Sun 閱讀(429) 評論(0)  編輯  收藏

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


          網站導航:
           
          <2007年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 高州市| 罗江县| 望都县| 监利县| 安化县| 龙江县| 莱芜市| 孟连| 忻城县| 若尔盖县| 贡山| 耿马| 德保县| 宕昌县| 滦平县| 和田县| 香港| 嘉峪关市| 拉萨市| 瑞昌市| 克拉玛依市| 玉环县| 剑川县| 奉新县| 息烽县| 铁岭县| 鹿邑县| 馆陶县| 襄城县| 梁河县| 米林县| 澜沧| 安国市| 交城县| 开鲁县| 方山县| 平乡县| 抚宁县| 拉萨市| 广灵县| 乌什县|