将负数变为无符号数就是这个负数和模值相加后的值。
二进制补码
string toHex(int num) {
string res="";
vector<string> v{"a","b","c","d","e","f"};
int n=7;
unsigned int x=num;
if(num<0) x=UINT_MAX+num+1;
while(x>0){
int t=pow(16,n);
int d=x/t;
if(d>=10) res+=v[d-10];
else if(d>=0) res+=to_string(d);
x%=t;
--n;
}
while(n-->=0) res+=to_string(0);
while(!res.empty()&&res[0]=='0') res.erase(res.begin());
return res.empty()?"0":res;
}
erase函数
位操作,每次取出最右边的4位
string toHex(int num) {
string res="";
for(int i=0;num&&i<8;i++){
int temp=num&0xf;
if(temp>=10)
res=char('a'+temp-10)+res;
else res=char('0'+temp)+res;
num>>=4;
}
return res.empty()?"0":res;
}
string toHex(int num) {
string res="",str="0123456789abcdef";
int cnt=0;
while(num&&(cnt++)<8){
res=str[(num&0xf)]+res;
num>>=4;
}
return res.empty()?"0":res;
}