随手记 如何将负整数转换为16进制数?

int型数据的范围是 [-2^31, 2^31-1],其中[0, 2^31-1]对应的16进制数存储方式为00000000 - 7fffffff   [-2^31, -1]对应的16进制数存储方式为80000000 - ffffffff,因此可以给负数加上2^32,将负数映射到[2^31, 2^32-1]区间,再进行转换。

如何理解呢?

原码的排序应该是 [-2^31, 2^31-1],但计算机使用补码存储数据,实际的排序应该是                    0  ~  (2^31-1)  ~  (-2^31)  ~  (-1)

[-2^31, 2^31-1]数据在计算机中以补码存储,如下

00000000 00000000 00000000 00000000(0)

00000000 00000000 00000000 00000001(1)

00000000 00000000 00000000 00000010(2)

00000000 00000000 00000000 00000011(3)

......

01111111 11111111 11111111 11111111(2^31-1)

10000000 00000000 00000000 00000000(-2^31)

10000000 00000000 00000000 00000001(-2^31-1)

......

11111111 11111111 11111111 11111101(-3)

11111111 11111111 11111111 11111110(-2)

11111111 11111111 11111111 11111111(-1)

实测代码:

class Solution {
public:
    string toHex(int num) {
        string ans;
        string hash("0123456789abcdef");
        long long n=num<0?num+(1ll<<32):num;
        if(n==0)
            return "0";
        while(n)
        {
            ans=hash[n%16]+ans;
            n/=16;
        }
        return ans;
    }
};

最近更新

  1. TCP协议是安全的吗?

    2024-04-02 13:36:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-02 13:36:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-02 13:36:01       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-02 13:36:01       20 阅读

热门阅读

  1. list(链表)容器(二)

    2024-04-02 13:36:01       18 阅读
  2. 如何在 xcode 中使用 string catalogs

    2024-04-02 13:36:01       18 阅读
  3. ubuntu卸载conda

    2024-04-02 13:36:01       14 阅读
  4. springboot集成logback-spring.xml文件

    2024-04-02 13:36:01       19 阅读
  5. Spring之Bean生命周期源码解析

    2024-04-02 13:36:01       23 阅读
  6. 如何找到 rpm 包对应的源码

    2024-04-02 13:36:01       18 阅读
  7. 前端工程师具备的能力(刚入行的前端必看)

    2024-04-02 13:36:01       17 阅读
  8. 为什么Python开发需要精通Git?

    2024-04-02 13:36:01       16 阅读
  9. 2024.4.1力扣(1200-1400)刷题记录

    2024-04-02 13:36:01       18 阅读
  10. TCP服务端主动向客户端发送数据

    2024-04-02 13:36:01       14 阅读
  11. Spring Boot单元测试

    2024-04-02 13:36:01       16 阅读