java 運算符總面試題總結

題目:請寫出下面幾個表達式的結果,答案可以用10進制或16進制書寫

1. 0xaa | 0x55

2. 15 & 240

3. 10 ^ 12

4. -2 >> 1

5. -2 >>> 1


解答:

1. 分析:十六進制數用0x……來表示,後面一個十六進制位是四位,兩個十六進制位爲一個字節,最多後面可以有8個十六進制位,32個字節,如:0xFFFFFFFF。 或(“ | ”)運算,全0爲0,其他爲1。

     所以:0xaa 用二進制表示爲 10101010 ,0x55 用二進制表示爲 01010101 ,按位或之後爲 11111111 ,十進制數爲255,十六進制數爲 0xFF 。


2. 分析:10進制轉換成2進制,用該數字除以2,記錄商和餘數,利用商再次除以2,記錄商和餘數……直到上爲0或餘數爲0停止,餘數逆序組成二進制的從低到高位(最後的餘數爲二進制最低位)。與(“ & ”)運算,全1爲1,其他爲0 。               

     所以: 15 等於1111 ,240等於 11110000,15前面用0補齊爲00001111 ,按位與之後爲 00000000 ,即結果爲0


3. 分析: 亦或(“ ^ ”)運算,相同取0,不同取1 。

     所以:1010 ^ 1100 =0110 , 十進制表示爲6,十六進制表示爲 0x06 。


4. 分析: 帶符號右移(“ >> ”),即有符號位時,負數符號位補1,正數符號位補0, -2 的二進制求法是正數取反加1,因此 2 的二進制表示爲0000 0000 0000 0000 0000 0000 0000 0010 ,取反加一爲 

                      1111 1111 1111 1111 1111 1111 1111 1110 ,即 -2 的二進制表示。

        注: >> , <<  , >>> ,  運算符只針對int型和long型,byte ,short ,char型需要轉換成Int型在進行操作。

    所以: 帶符號右移之後爲 1111 1111 1111 1111 1111 1111 1111 1111 ,除符號位之外,減一取反,得到帶符號十進                 制數爲 -1 。


5. 分析:無符號右移 (“ >>> ”) ,即無論正負數,右移之後符號位均補 0 。

    所以: -2 的二進制無符號右移一位之後爲 0111 1111 1111 1111 1111 1111 1111 1111,即 2^31 - 1,二的三十一次方減一。

        :右移和無符號右移主要區別就在於左面最高位補 0 還是補 1 的問題,無符號右移任何時候最高位都補 0 ,                  有符號右移則是正數補 0 ,負數補 1 。(沒有無符號左移!)


               

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章