本文共 866 字,大约阅读时间需要 2 分钟。
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。注意:十六进制中所有字母(a-f)都必须是小写。十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。 给定的数确保在32位有符号整数范围内。不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。示例 1:输入:26输出:"1a"示例 2:输入:-1输出:"ffffffff"
位运算
class Solution { public String toHex(int num) { if (num == 0){ return "0"; } char[] chars = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; //char[] chars = "0123456789abcdef".toCharArray(); StringBuilder sb = new StringBuilder(); while (sb.length() < 8 && num != 0) { //int整数一共32位,4位为一个十六进制,因此int可以转为8位16进制,小于8则没有转完 sb.append(chars[num & 0xf]);//0xf就是1111,每次num和1111作与运算,得到的结果就是num的最后四位的十进制表示,从 //chars中查阅对应的十六进制 num >>= 4;//右移四位,进行下一位十六进制的查找 } return sb.reverse().toString();//sb的顺序和真正的十六进制的数顺序相反,所以要reverse }}
转载地址:http://ewxlf.baihongyu.com/