1.题目

给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。

注意:

  1. 十六进制中所有字母(a-f)都必须是小写。
  2. 十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
  3. 给定的数确保在32位有符号整数范围内。
  4. 不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。

示例:

  1. 输入:
  2. 26
  3. 输出:
  4. "1a"
  5. 输入:
  6. -1
  7. 输出:
  8. "ffffffff"

2.思路

2进制转换16进制,使用位移运算

比如:二进制数 10101101110 转十六进制,从最低位没四位为一组,高位缺失则补0

可分为:010101101110

分别计算各组的数字为:56E(14)

转换后的数字为:56E

  1. public String toHex(int num) {
  2. StringBuffer buffer = new StringBuffer();
  3. char[] arr ="0123456789abcdef".toCharArray();
  4. if(num==0) {
  5. return "0";
  6. }
  7. while (num!=0){
  8. int tmp=num&15;
  9. buffer.append(arr[tmp]);
  10. num=num>>>4;
  11. }
  12. return buffer.reverse().toString();
  13. }