给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
注意:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
示例 1:
输入:
26输出:
"1a"
方法一:从高到低依次转换
由题,给定的int类型二进制长度为32,考虑有前导0的存在,可以从最高的4位(二进制)开始转换,一共转换8组(32 / 4 = 8)。我们可以利用位运算的性质将右移后的原数与二进制下1111作与运算从而保留最后四位即当前项十进制下的值。对于转换后的二进制数,我们可以将其以十进制储存,当遇到为0的转化结果时判断是否为前导零来进行添加判断。
private static final char[] CHARS = new char[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a&