405. 数字转换为十六进制数

这篇博客探讨了如何使用C++将十进制整数转换为十六进制字符串。针对正数和负数,文章详细解释了计算机中的原码、反码和补码概念,并指出对于负数,需要将其转换为补码的十六进制形式。提供的解决方案中,通过无符号整数避免了不同码的概念,并利用位运算进行转换。左移和右移的操作也在说明中被提及,最后给出了两个实现该功能的C++代码示例。
摘要由CSDN通过智能技术生成

要求:转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;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值