posts - 7,  comments - 0,  trackbacks - 0
           

          Java 語(yǔ)法介紹(二):運(yùn)算符

           

          1:優(yōu)先級(jí)

           優(yōu)先級(jí)是指同一式子中多個(gè)運(yùn)算符被執(zhí)行和次序,同一級(jí)里的操作符具有相同的優(yōu)先級(jí),相同優(yōu)先級(jí)得操作符號(hào)相遇是,根據(jù)結(jié)合性決定運(yùn)算次序,下面從高到低的優(yōu)先級(jí)列出了運(yùn)算符。同一行中的運(yùn)算符優(yōu)先級(jí)相同。


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

            例如對(duì)于表達(dá)式:a=b+c*d/(c^d),因?yàn)槔ㄌ?hào)優(yōu)先級(jí)最高,所以先計(jì)算c^d,接著是c*d,然后除以c^d,最后,把上述結(jié)果與b的和存儲(chǔ)到變量a中。

          2
          :整型運(yùn)算符

            整型運(yùn)算符按操作數(shù)的多少可分為一元和二元兩類,一元運(yùn)算符一次對(duì)一個(gè)變量進(jìn)行操作,二元運(yùn)算符一次對(duì)兩個(gè)變量進(jìn)行操作。對(duì)于運(yùn)算來(lái)說(shuō),如果有一個(gè)變量或操作數(shù)是長(zhǎng)整型的,那么結(jié)果就肯定是長(zhǎng)整型的,否則即使操作數(shù)還沒有確定是字節(jié)型、短整型或字符型,運(yùn)算結(jié)果都是整型,下表是一元運(yùn)算符。

          運(yùn)算符 實(shí)際操作 例子
            -   改變整型數(shù)符號(hào)   -i
            ~   位運(yùn)算:非   ~i
            ++   加1   i++
            --   減1   i--

          注:一元取反運(yùn)算符(-)用來(lái)改變整數(shù)的正負(fù)號(hào),逐位求反把所變量所有是1的位變成0,是0的位變成1,加加和減減(++,--)把變量的值加1或減1
            以下是一個(gè)具體例子:

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

            一元運(yùn)算符執(zhí)行的方式是改變它們所作用的變量的值,對(duì)一元取反和逐位求反來(lái)說(shuō),變量的值并不改變,而對(duì)加和減運(yùn)算(++,--)來(lái)說(shuō),就量的值被改變了,例如:

              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仍然為原來(lái)的數(shù)值,當(dāng)在復(fù)合表達(dá)式中使用一元取反和逐位求余運(yùn)算時(shí),你實(shí)際上是在用一個(gè)臨時(shí)存貯操作數(shù)的新值。

            ++和--既是前置運(yùn)算符也是后置運(yùn)算符,這就是說(shuō),它們既可以放在操作數(shù)前面(++x),也可以放在后面(x++),如果它們被用在復(fù)合語(yǔ)句中如:

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

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


          注意:>>>>>的基本功能都是右移,但>>是用符號(hào)位來(lái)填充右移后所留下的空位,而>>>則是用零來(lái)填充右移后所留下的空位。

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

            這里有幾點(diǎn)關(guān)于整型運(yùn)算進(jìn)一步說(shuō)明,首先,整數(shù)除法向靠近0的方向取整;其次,如果你除以0或者對(duì)0取模,程序就會(huì)在運(yùn)行時(shí)被強(qiáng)行中止,如果你的運(yùn)算結(jié)果超出最小極限,或者說(shuō)是下溢,結(jié)果將為0,如果超出了最大極限,就將會(huì)導(dǎo)致結(jié)果的回繞。

          3
          :布爾運(yùn)算符

            另外還有一些運(yùn)算符能產(chǎn)生布爾類型的結(jié)果,我們把它們稱為布爾運(yùn)算符,下表列出了這些運(yùn)算符。

          運(yùn)算符 實(shí)際操作 例子
          <
          小于 a<b
          >
          大于 a>b
          <=
          小于等于 a<=b
          >
          大于等于 a>=b
          ==
          等于 a==b
          !=
          不等于 a!=b

            在這里要指出的是相等運(yùn)算符==可能會(huì)給你帶來(lái)許多麻煩,很多人在比較兩個(gè)值時(shí)往往錯(cuò)用了等號(hào)=,以致于變成了賦值操作,所以在編程中一定要注意你在比較數(shù)值時(shí)用的是==。布爾類型本身還有幾個(gè)邏輯運(yùn)算符,它們可以對(duì)布爾類型的數(shù)據(jù)進(jìn)行運(yùn)算:!,&&,//

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

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

            Operand ? Statement1:Statement2
            在這個(gè)式子中,先計(jì)算Operand的真假,若為真,則執(zhí)行Statement1,若為假,則執(zhí)行Statement2。下面的代碼給出了這種運(yùn)算的一個(gè)例子:

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

          4
          :浮點(diǎn)型運(yùn)算符

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

            同整型變量相似,結(jié)果被放在最大長(zhǎng)度的類型里,如果運(yùn)算包括兩個(gè)浮點(diǎn)類型,結(jié)果也是個(gè)浮點(diǎn)類型,如果有一個(gè)或幾個(gè)是雙精度浮點(diǎn)型,結(jié)果就是雙精度浮點(diǎn)型,當(dāng)你使用關(guān)系運(yùn)算符:><>=<===!=時(shí),注意浮點(diǎn)變量與整型的不同,只有a==b成立并不能說(shuō)明a<ba>b不成立,這是因?yàn)楦↑c(diǎn)類型數(shù)值次序同整型不同,當(dāng)你寫程序,對(duì)浮點(diǎn)型數(shù)值進(jìn)行假設(shè)時(shí)要小心,浮點(diǎn)型數(shù)值也包括inf,代表無(wú)窮大,溢出產(chǎn)生無(wú)窮大inf,下溢產(chǎn)生0

          5
          :字符串運(yùn)算符

            +運(yùn)算符可以把字符串并置起來(lái),如果哪一個(gè)操作數(shù)不是字符串,在并置之前它會(huì)被轉(zhuǎn)換成字符串,另外,+=運(yùn)算符把兩個(gè)字符串并置的結(jié)果放進(jìn)第一個(gè)字符串里,在前面的例子里,當(dāng)你想把幾項(xiàng)打印在同一行里時(shí)使用的是+運(yùn)算符,試著在解釋器里用System.out.println+運(yùn)算符來(lái)造成不同的組合輸出。

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

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


          網(wǎng)站導(dǎo)航:
           
          <2007年9月>
          2627282930311
          2345678
          9101112131415
          16171819202122
          23242526272829
          30123456

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 岳普湖县| 泸水县| 天等县| 宜丰县| 平阴县| 皮山县| 杂多县| 平乐县| 北流市| 大厂| 福州市| 岳阳市| 河源市| 永年县| 霍邱县| 依兰县| 昌黎县| 建阳市| 牙克石市| 虞城县| 闽清县| 庆安县| 玛曲县| 太原市| 临潭县| 清远市| 大同县| 邵东县| 阿鲁科尔沁旗| 宕昌县| 偃师市| 兴和县| 通城县| 凤翔县| 无极县| 新野县| 冷水江市| 普安县| 曲水县| 唐山市| 通道|