405.数字转换为十六进制数

2020-05-08
数字转换为十六进制数

给定一个整数,编写一个算法将这个数转换为十六进制数。

对于负整数,我们通常使用 补码运算 方法。

注意:
  • 十六进制中所有字母(a-f)都必须是小写。
  • 十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。 
  • 给定的数确保在32位有符号整数范围内。
  • 不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法
题解:
思路1:位运算
var toHex = function (num) {
  if (!num) return '0';
  let res = '';
  const pos = '0123456789abcdef';
  while (num != 0) {
    // num转为二进制后 最后4位(代表16进制的1位)与 二进制的15(1111)去与运算 得到最后4位的值
    // 这个值就是16进制的最后一位 
    res = pos[num & 15] + res;
    // 取完后 num 右移4位 删掉已经取值的最后4位
    // >>> 是带符号位的右移运算符 正数情况跟 >> 一样 
    // 这个运算实际上将一个值转为32位无符号整数。
    // 查看一个负整数在计算机内部的储存形式,最快的方法就是使用这个运算符
    num >>>= 4;
  }
  return res;
}

 

posted @ 2020-05-08 09:25  蓝小胖纸  阅读(189)  评论(0编辑  收藏  举报