给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
注意:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
示例 1:
输入:
26
输出:
"1a"
示例 2:
输入:
-1
输出:
"ffffffff"
参考思路:https://leetcode-cn.com/problems/convert-a-number-to-hexadecimal/comments/
#include<iostream>
#include<algorithm>
using namespace std;
/*
位运算:
1.使用'0xf'(00....01111b)获取低四位
2.'>>'算数右移,正数右移左边补0,负数右移左边补1
3.位移运算并不能保证 "num==0",需要使用32位int来保证(对应的16进制,小于等于8位)
*/
class Solution {
public:
string toHex(int num) {
if (num == 0)
return "0";
const char HexMap[16] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' };
int calc = 0xf;
string res = "";
unsigned int val;
while (num && res.size() < 8) {
val = num & calc;
num = num >> 4;
res += HexMap[val];
}
reverse(res.begin(), res.end());
return res;
}
};
int main() {
Solution* ps = new Solution();
int num;
cin >> num;
string res = ps->toHex(num);
cout << "res:" << res << endl;
system("pause");
return 0;
}