1. 程式人生 > 其它 >405. 數字轉換為十六進位制數

405. 數字轉換為十六進位制數

給定一個整數,編寫一個演算法將這個數轉換為十六進位制數。對於負整數,我們通常使用補碼運算方法。

注意:

十六進位制中所有字母(a-f)都必須是小寫。
十六進位制字串中不能包含多餘的前導零。如果要轉化的數為0,那麼以單個字元'0'來表示;對於其他情況,十六進位制字串中的第一個字元將不會是0字元。
給定的數確保在32位有符號整數範圍內。
不能使用任何由庫提供的將數字直接轉換或格式化為十六進位制的方法。

示例 1:

輸入:
26
輸出:
"1a"

示例 2:

輸入:
-1
輸出:
"ffffffff"

位運算

(1)建立digit到char對映的方式有多種,可以直接定義一個字串"0123456789abcdef",也可以定義char陣列 { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }。
(2)計算機中數字本就是以補碼的形式儲存的,所以我們只需要簡單地把每四位數字變成一個數字即可


(3)<<和>>有符號移位運算,即符號位也參與移位。題目保證給定的數確保在32位有符號整數範圍內,因此移位運算最多8次,while迴圈需要加上這一條件,否則num<0時可能出現死迴圈(右移左側補1)。

   public String toHex(int num) {
        if(num==0) return "0";
        String hex="0123456789abcdef";
        StringBuilder res=new StringBuilder("");
        while(num!=0&&res.length()<8){
            res.insert(0,hex.charAt(num&0xf));
            num>>=4;
        }
        return res.toString();
    }

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。