給定一個整數,編寫一個算法將這個數轉換為十六進制數。對於負整數,我們通常使用 補碼運算 方法。
注意:
十六進制中所有字母(a-f)都必須是小寫。
十六進制字符串中不能包含多余的前導零。如果要轉化的數為0,那么以單個字符'0'來表示;對於其他情況,十六進制字符串中的第一個字符將不會是0字符。
給定的數確保在32位有符號整數范圍內。
不能使用任何由庫提供的將數字直接轉換或格式化為十六進制的方法。
示例 1:
輸入:
26
輸出:
"1a"
示例 2:
輸入:
-1
輸出:
"ffffffff"
【筆記】核心思想,使用位運算,每4位,對應1位16進制數字。
- 使用
0xf
(00...01111b)獲取num
的低4位。 >>
算數位移,其中正數右移左邊補0,負數右移左邊補1。- 位移運算並不能保證
num==0
,需要使用32位int保證(對應16進制小於等於8位)。
使用string直接進行字符串拼接....
string toHex(int num) { if (num == 0) return "0"; string hex = "0123456789abcdef", ans = ""; while(num && ans.size() < 8){ ans = hex[num & 0xf] + ans; num >>= 4; } return ans; }