十進制轉換成十六進制小程序(強制轉換和移位運算符)

涉及知識點:強制類型轉換,移位運算符,十進制轉換十六進制。

十進制數 60 轉換成十六進制過程分析

60的二進制表示:

   0000-0000  0000-0000  0000-0000  0011-1100

&0000-0000  0000-0000  0000-0000  0000-1111    //與運算,和15與運算得到60的十六進制的最後一位。

=0000-0000  0000-0000  0000-0000  0000-1100   //即60的十六進制數,最後一位是12,也就是C。

移位運算符:

然後右移四位,移位運算符 “>>” 和 "<<" ,“>>” 運算符用符號位填充高位,"<<" 運算符用0填充低位。

還有一個右移運算符 ">>>" 用 0 填充高位。

本例中使用 ">>>"。

所以60右移四位後爲:

   0000-0000  0000-0000  0000-0000  0000-0011

&0000-0000  0000-0000  0000-0000  0000-1111    //繼續和 15 進行與運算。

=0000-0000  0000-0000  0000-0000  0000-0011    //得到3,即60的十六進制是 3C。

強制類型轉換:

12 怎麼轉換成16進制的 'C' 呢?如下

char t = 2 + 'A' ; // int 類型強制轉換爲char類型,前面加char,輸出爲char類型的 'C'。
t = 'C' ;

t = 2 + 'A' ;  //無強制轉換,默認輸出 int 類型,char類型轉換爲對應的ASCII碼輸出。
t = 67;

不同數據類型的數據參與運算,數據類型要強制轉換,轉換方向是:

(unsigned)char,(unsigned)short->int->unsigned->long->unsigned long->float->double

合法的類型轉換見圖:

實心箭頭表示無信息丟失的轉換,虛線箭頭表示有精度損失。

代碼分析:

public class DtoH {
    public static void main(String[] args) {
        toHex(60);
    }
    public static void toHex(int num) {
        for(int x=0; x<8; x++) {
            int temp = num & 15;      //和 1111(二進制) 進行與運算,得到十六進制的最後一位。
            if(temp>9)
                System.out.println((char)(temp-10+'A'));   //大於9則轉換成十六進制,將10、11、12、13、14、15對應輸出爲 A、B、C、D、E。
            else
                System.out.println(temp);
            num = num >>> 4;        //右移四位,繼續與運算。
        }
    }
}

(char)(temp-10+'A')
就表示強制轉換,12-10+‘A'  轉換成 char 類型 ,結果爲 'C' 。

代碼結果爲


即結果爲 3C

發佈了39 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章