题意是求一个数的十六进制表示。需要明确一下几个知识点:
1. 计算机中,数字的存储方式都是补码
2. 整数的 原码、反码、补码是自己;负数的原码是在整数原码基础上最高位表示符号位,反码是在原码基础上,除了符号位取反,补码是负码加1。
3. 有符号数左移,都是直接左移,右边补0
4. 无符号数右移,如unsigned右移,最高位补0
5. 有符号数右移稍微麻烦点,整数右移,最高位补0;负数右移,补码右移,最高位补1
上述参考{:target=”_blank”}
C++ 代码
class Solution {
public:
string toHex(int num) {
if(!num)return "0";
string res;
// 转换为 无符号数右移
unsigned unum = num;
string s = "0123456789abcdef";
while(unum) {
int id = unum & 0xf;
res += s[id];
unum >>= 4;
}
reverse(res.begin(), res.end());
return res;
}
};