405.数据转换为十进制数(javascript)405.ConvertaNumbertoHexadecimal
原创给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
注意:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符’0’来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
Given an integer num, return a string representing its hexadecimal representation. For negative integers, two’s complement method is used.
All the letters in the answer string should be lowercase characters, and there should not be any leading zeros in the answer except for the zero itself.
Note: You are not allowed to use any built-in library method to directly solve this problem.
示例 1:
输入:
26
输出:
"1a"
示例 2:
输入:
-1
输出:
"ffffffff"
补码请参考: https://www.w3school.com.cn/js/js_bitwise.asp
JavaScript 位运算符
运算符
名称
描述
&
AND
如果两位都是 1 则设置每位为 1
|
OR
如果两位之一为 1 则设置每位为 1
^
XOR
如果两位只有一位为 1 则设置每位为 1
~
NOT
反转所有位
<<
零填充左位移
通过从右推入零向左位移,并使最左边的位脱落。
>>
有符号右位移
通过从左推入最左位的拷贝来向右位移,并使最右边的位脱落。
>>>
零填充右位移
通过从左推入零来向右位移,并使最右边的位脱落。
核心思想 ,使用位运算,每4位,对应1位16进制数字。
使用0xf(00…01111b)获取num的低4位。
>>
算数位移,其中正数右移左边补0,负数右移左边补1。
位移运算并不能保证num==0,需要使用32位int保证(对应16进制小于等于8位)。
使用string直接进行字符串拼接
var toHex = function(num) {
if(num==0){
return "0"
}
let newList=[]
for(let i=7;i>=0;i--){
let val=(num>>(i*4)) & 0xf
if(val>0||newList.length>0){
let value=val<10?val+:String.fromCharCode(a.charCodeAt()+val-10)//小于10时,转换为字符串正常添加到数组,大于等于10时转换成对应的字符添加到数组
newList.push(value)
}
}
return newList.join()//将得到的数组转换成字符串
};
- 对
let val=(num>>(i*4)) & 0xf
进行解析
0xf=15 十六进制1111 0x代表十六进制
所有按位运算都以 32 位二进制数执行,每4位取值
>>
通过从左推入最左位的拷贝来向右位移,并使最右边的位脱落。
从左往右遍历,将所得到的数,进行二进制计算,使得到的数为四位
-
charCodeAt() 返回字符串第一个字符的 Unicode 编码(H 的 Unicode 值):
var str = "HELLO WORLD"; var n = str.charCodeAt(0); console.log("n", n);//72 console.log(a.charCodeAt());//97
-
fromCharCode(),将 Unicode 编码转为一个字符
console.log(String.fromCharCode(72, 69, 76, 76, 79)); //HELLO console.log(String.fromCharCode(65));//A
-
为了解决不能大于0xffff的问题,es6出现了fromCodePoint。
fromCodePoint用法与fromCharCode用法一致 -
进制之间的转换参考: https://blog.csdn.net/ingenuou_/article/details/123865169
leetcode: https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal/
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除