注意:给定的数确保在32位有符号整数范围内。
示例 1:
输入: 26 输出: "1a"
示例 2:
输入: -1 输出: "ffffffff"
思路:
class Solution { func toHex(_ num: Int) -> String { var num = num var resnum = 0 let hex = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"] var res = "" if num == 0 { return "0" } while num != 0 && resnum < 8 { res = hex[num & 15] + res num >>= 4 resnum += 1 } return res } }
备注:
核心思想,利用二进制转十六进制,使用位运算,每4位,对应1位16进制数字。
num & 15 取num二进制的最右侧的4位,类似 num & 1 取num二进制的最右侧的1位。
二进制0000-1111 正好映射十六进制的0-f。
正数,右移左侧补0,负数,右移左侧补1。
二进制是32位有符号数,4位右移一次,所以转为十六进制右移8次。