要求:转16进制,负数要补码的十六进制
思路:计算机中正数存原码负数以补码形式存储,-8原码1000反码1111,补码1000,对32位有符号-1而言,原码8000001,反码fffffffe,补码fffffff。本题意思是正数直接输出原码,负数的话是直接输出补码
正常1对应0x1,-1对应-0x1,但本题还得输出补码太麻烦,直接用无符号数没有三种码的概念可以无视正负
左移就是:0补最低位,然后丢弃最高位。
右移就是:正数的话补0,负数补1。
无符号数都是补0
class Solution {
public:
string toHex(int num) {
if(num==0)return "0";
string s="";
char hash[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
unsigned int n=num;
while(n!=0){
int val=n&0xf;
s=hash[val]+s;
n=n>>4;
}
return s;
}
};
class Solution {
public:
string toHex(int num) {
if(num==0)return "0";
string s="";
char hash[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
unsigned int n=num;
while(n!=0){
int val=n%16;
s=hash[val]+s;
n/=16;
}
return s;
}
};