力扣习题405:数字转化为十六进制数 (转化8进制,算法类似)

这道题在力扣里面归属于位运算,位运算一般来讲,速度比较快,效率高。在解决本题时,个人作为初学者最先想到的是直接用除法、求余去解决,但是这样比较的麻烦,算法效率不高,进制转换一般可以尝试使用位运算来实现。题目很好理解,算法也不难,在此,本人想写一篇详细解法来为大家提供便利。

首先,使用位运算最好是能对位运算的特性有了解。本题主要使用&运算。&运算最大的特点是同为1才能得1,假如我们用全1于某一个数做运算,结果还是数的本身,且结果的位数为两者位数最小。比如26&15,15有4位,结果为26的低四位;4&15,结果为4。如图所言。也就是说,可以用&运算去截取数字的低位

那假如说,要截取一些数的高位,或者是中间位怎么办呢??这时,可以用>>,右移符号,数字右移,正数的话补0,负数补1。这时数字通过右移就可以将高位移到低位。当然,截取想要的数字的一些位数,还有其他位运算。

我们知道,二进制转十六进制可以通过四位一转的方式进行转化。那么对于本题来言,可以让数字每次与15做&运算,获取低4位后,再将数字右移四位,此时数字的从低往高数,5-8位变成数字的0-4位,那么又可以截取低四位,如此循环即可将数字转化为十六进制。这就是本题的思路。计算机内部数字位运算统一采取二进制,代码里面的数字最终都会转为二进制。

class Solution {
public:string toHex(int num) {const char MAP[16] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};string str = "";if (num == 0) {return "0";}for(int i = 0; i<8; i++) {str = MAP[num&15] + str;num >>= 4;}int fisterZeroPos = str.find_first_not_of('0');str.erase(0,fisterZeroPos);return str;}
};

num&15可得每次截取到的低四位,然后根据得到的低四位对应得数字去MAP数组里面寻找十六进制对应符号即可。

由于题目中提示,数字时32位有符号数,因此每次移动4位,总共需要8次,但是假如某些数达不到32位,那么str出for循环后会有很多多余得0,因此需要除去0。并且再截取低四位时,str拼接得到的是与答案相反得,最后需要字符串翻转。

数字转化为十六进制 按位操作(详解)相关推荐

  1. 十进制转化为十六进制C语言详解

    问题描述:输入一个十进制整数(可能大于15),转化为十六进制输出 解决方法:除16取余数倒排,取余结果放入到str1,倒排结果放入到str2 编译环境:vc++6.0 代码: #include < ...

  2. python判断输入数字大于0,对python 判断数字是否小于0的方法详解

    对python 判断数字是否小于0的方法详解 为了精度更准确 可以使用数字的绝对值 < 1.0e-16  或者 < 1.0e-8来对比 abs(Num) 以上这篇对python 判断数字是 ...

  3. 【OpenCV/C++】KNN算法识别数字的实现原理与代码详解

    KNN算法识别数字 一.KNN原理 1.1 KNN原理介绍 1.2 KNN的关键参数 二.KNN算法识别手写数字 2.1 训练过程代码详解 2.2 预测分类的实现过程 三.KNN算法识别印刷数字 2. ...

  4. C语言位操作详解-4.2.C语言专题第二部分-朱有鹏-专题视频课程

    C语言位操作详解-4.2.C语言专题第二部分-11753人已学习 课程介绍         本课程的目标是让大家彻底掌握C语言中位运算符及常规技巧,这些知识在嵌入式代码中用的很多,尤其是设置寄存器以操 ...

  5. stm32位操作详解

    stm32位操作详解 STM32位操作原理 思想:把一个比特分成32位,每位都分配一个地址,这样就有32个地址,通过地址直接访问. 位操作基础 位运算 位运算的运算分量只能是整型或字符型数据,位运算把 ...

  6. c++十六进制加法_详解C++中十六进制字符串转数字(数值)

    详解C++中十六进制字符串转数字(数值) 主要有两个方法,其实都是对现有函数的使用: 方法1: sscanf() 函数名: sscanf 功  能: 从字符串格式化输入 用  法: int sscan ...

  7. 经典例题:十六进制转换十进制详解 适合初学者

    任务描述 字符串转换成十进制整数. 输入一个以 # 结束的字符串,滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出.如果过滤后字符串的首字符为 ...

  8. C语言位操作详解(全网最全)

    综述 程序中的所有数在计算机内存中都是以二进制的形式储存的.位运算说穿了,就是直接对整数在内存中的二进制位进行操作.运位算包括位逻辑运算和移位运算,位逻辑运算能够方便地设置或屏蔽内存中某个字节的一位或 ...

  9. c语言stdio中null的值,C/C++编程笔记:C语言NULL值和数字 0 值区别及NULL详解

    原创 程序员无言 2020-07-01 在学习C语言的时候,我们常常会碰到C语言NULL值和数字 0 ,很多小伙伴搞不清楚他们之间的一个区别,今天我们就了解一下他们之间的区别,一起来看看吧! 先看下面 ...

最新文章

  1. python 图像压缩后前端解压_Python在后台自动解压各种压缩文件的实现方法
  2. java中顺式和链式_Java单链表顺序和链式实现(数据结构五)
  3. Mysql数据库的打开和关闭
  4. 【超参数寻优】量子粒子群算法(QPSO) 超参数寻优的python实现
  5. spotlight soo5072:there was an error reading the tnsnames.ora
  6. [译] 原生 JavaScript 值得学习吗?答案是肯定的
  7. jenkins 插件目录_10 个 Jenkins 实战经验,助你轻松上手持续集成
  8. 1 在 Linux 下开机自动重启脚本(亲测)
  9. (原創) 如何在Ubuntu上啟動ADSL連線? (OS) (Linux) (Ubuntu)
  10. java进程的守护进程脚本
  11. 10.企业安全建设指南(金融行业安全架构与技术实践) --- 安全预算、总结与汇报
  12. ASP.NET 2.0 Internet安全之参考实现
  13. 演练:使用 SQL Server CE 数据库
  14. MYSQL将两张表的数据合并显示
  15. xp怎么看自己计算机密码,如何找回Windows XP系统密码啊?
  16. 《龙腾世纪2》图文流程攻略
  17. 归来仍少年•青春不散场 | CEO刘其东出席同济经管学院2022级新生入学典礼及2022年毕业典礼
  18. 【vue】在vue,vue cli中拼接字符串,拼接图片链接
  19. 鲸发卡11.02免授权版本
  20. js等待异步执行完再执行,js如何让代码同步执行

热门文章

  1. ubuntu: 找不到libcrypto.so.1.1或者libssl.so.1.1怎么办
  2. 7.1 MySQL视图和存储过程
  3. JSP汽车维修服务管理系统myeclipse开发SqlServer数据库bs框架java编程web网页结构
  4. 大象数据库postgresql服务无法启动
  5. 802.1Q中的secure/check/fallback/disable的简单分析
  6. android定制机测试,在 Android Studio 中利用 “产品定制” 进行封闭测试
  7. EduCoder答案-网页抓取及信息提取
  8. Excel 2010 VBA 入门 056 获取当前Windows登录用户名(Environ)
  9. 关于clock.avi文件
  10. 大屏幕实时数据可视化解决方案?