leetcode:数字转换为十六进制数(详解)
前言:内容包括:题目,代码实现,大致思路,代码解读
题目:
给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。
注意:
十六进制中所有字母(a-f)都必须是小写。
十六进制字符串中不能包含多余的前导零。如果要转化的数为0,那么以单个字符'0'来表示;对于其他情况,十六进制字符串中的第一个字符将不会是0字符。
给定的数确保在32位有符号整数范围内。
不能使用任何由库提供的将数字直接转换或格式化为十六进制的方法。
示例 1:
输入:
26
输出:
"1a"
示例 2:
输入:
-1
输出:
"ffffffff"
代码实现:
char * toHex(int num)
{char arr[] = { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' };char* ret = malloc(9* sizeof(char));ret[8] = '\0';int index = 7;int count = 8;do{ret[index--] = arr[num & 0xf];count -= 1;num >>= 4;} while (num && count);return ret + index + 1;
}
大致思路:
将num的32个比特位每4位一转换(四个比特位=一个十六进制的数字):
1 一个arr数组存储16进制的所有数值:0~9 a~f
由于题目返回的是字符串类型,所以arr数组的每个元素都是字符,即'0'~'9' 'a'~'f'
2 num&0xf即可得到最低的四个比特位,0xf表示16进制的f
&:有0则0,双1则1
比如num是26(这里只显示从后往前的后8个比特位)
26的二进制位:0001 1010
0xf的二进制位: 0000 1111
26&0xf: 0000 1010 ->26的最后四个比特位
3 num的每四个比特位转换完成后,需要右移4位,效果是去掉这四个已经转换完成的比特位
但是:右移分为算术右移,和逻辑右移
leetcode上是算术右移,即正数右移时,右边抛弃,左边补0
负数右移时,右边抛弃,左边补1
4 什么时候是num的全部比特位转换完毕?
num为正数:当num为0时转换完毕(因为num转换完一组四个比特位,就会右移4个比特位,右移的同时左边会补0,当正数的num转换完毕后,它的32个比特位全是0)
num为负数:设置count来统计num的转换次数,当count由初始的8变成0时,代表转换完毕
(因为负数的num每转换完一组四个比特位,也需要右移这4个比特位,右移的同时左边会补1,所以负数的num转换完毕的判断条件不能用num是否变成0,我们知道32为比特位,四个为一组,可以分为8组,那么count初始值设置为8,表示现在有8组待转换,每转换完一组,count--,当8组全部转换完成后,count==0)
代码解读:
part 1
char* ret = malloc(9* sizeof(char));ret[8] = '\0';//手动在最后一个空间加上字符串的结束标志'\0'int index = 7;//正式存放转换好的元素的起始空间int count = 8;//当num为负数时,根据count的变化判断其是否转换完成
1 malloc动态开辟一块空间,用于存放由数字num转成十六进制的字符串形式
32个比特位,每四个为一组,可以分为8组(四个比特位对应一个十六进制数)
故而一个num最多可以转成8个字符(一个字符是一个十六进制数字的字符形式)
再加上字符串末尾的'\0',共需8+1=9的空间
2 转换是从32个比特位的末尾开始转换的,所以我们需要倒着存放
part 2
do{ret[index--] = arr[num & 0xf];//对num后四个比特位进行十六进制的转换count -= 1;//一组转换完成num >>= 4;//去掉已经转换完成的一组四个比特位} while (num && count);return ret + index + 1;//返回第一个元素的地址
1 需要使用do-while循环,而不使用while循环,原因在于:
while的结束条件是:num&&count,前一个用于判断num为正数时,转换是否结束
后一个用于判断num为负数时,转换是否结束
num为真:正数的num还未转换完成
count为真:负数的num还未转换完成
但是当num为0时,若只是使用while循环,则num不会进入循环,也就不会对为0的num进行十六进制的转换
所以使用do-while循环,直接执行一次转换,这样当num为0时,也能发生十六进制的转换
2 ret + index + 1
num最多能转换成8个六进制的字符
这意味着,num存在这样情况:全部转换完成后,没有将空间填满
比如当num为26时,转换成:1a,只占了两个空间
由于我们是倒着存放的(因为转换是从32个比特位的后四位向前转换的),且index--是后置--
所以当转换完成后,index+1,就是第一个元素的下标,ret+index+1,就是第一个元素的地址
相关文章:
leetcode:数字转换为十六进制数(详解)
前言:内容包括:题目,代码实现,大致思路,代码解读 题目: 给定一个整数,编写一个算法将这个数转换为十六进制数。对于负整数,我们通常使用 补码运算 方法。 注意: 十六进制中所有字…...
Android 10 设置人脸解锁时,锁屏显示人脸解锁图标
Android 10设置人脸解锁时,锁屏解锁图标不会显示人脸图标,若想显示人脸图标,可参考以下两点进行修改: 1.此处引用人脸图标资源,请参考如下修改: diff --git a/packages/SystemUI/src/com/android/systemui/…...
【嵌入式环境下linux内核及驱动学习笔记-(5-驱动的并发控制机制)】
目录 1、上下文和并发1.1 上下文1.2 共享与临界内核中并发控制机制分为以下几类:并发控制机制的使用场景: 2、 并发控制机制--中断屏蔽3、并发控制机制--原子变量3.1 相关函数原子量类型a.设置原子量的值b.获取原子量的值c.原子变量加减d.原子变量自增自…...
必学宝典 黑马《最新JavaWeb开发教程》上线
对于程序员,所在的行业更迭实属过快,如果是为了找一份好工作,学技术前一定要先了解技术在市场中的需求情况。不然等你学完之后,才发现自己学了已被淘汰、过时的技术,白白浪费了宝贵的学习时间,后悔都来不及…...
【社区图书馆】学习如何读书
人类社会只有发明了发明的方法之后才能发展。同样道理,你们只有学习了学习的方法之后才能进步。 ——查理芒格 进了开发的门,从一开始就在查文档、百度搜 bug 解决的文章、买书,读书。买了很多很厚的工具书,然后拿来垫桌子。再然后…...
CO02工单组件,新增/删除/修改
REPORT zpp153. 事务代码: ZPP153-整散车生产订单自动调整程序名称:ZPP153-整散车生产订单自动调整程序目的:ZPP153-整散车生产订单自动调整开发人员: *(修改日志)--------------------------------------------------------日志号…...
MIT6.824 lab3AB记录
实验目标:基于raft日志复制算法实现的线性一致性kv存储引擎。 线性一致性: 所有的读操作都能够读取到最近一次写操作的结果。所有节点(或者进程)在同一时刻,看到的数据都是相同的。 简而言之,线性一致性…...
一分钟了解美国棒球体系·棒球1号位
美国棒球体系是一个庞大且复杂的体系,涵盖了从青少年到职业的各个层次。下面是美国棒球体系的主要组成部分: 1. 青少年棒球(Youth Baseball) 美国的青少年棒球体系包括各种地区和全国性的联盟,如Little League、Pony…...
通过ObjectMapper和JsonNode 把JSON字符串转换成树结构数据和获取树节点数据
一.简介 今天同事有个需求,要把一个JSON字符串转换成一个树结构的数据并获取节点数据,鉴于自己不想写递归去转换,于是使用ObjectMapper和JsonNode类去实现。 二.依赖 pom文件引入依赖: <dependency><groupId>com.…...
鉴源论坛 · 观模丨面向界面的图形化测试技术
作者 | 熊一衡 华东师范大学软件工程学院博士 苏亭 华东师范大学软件工程学院教授 版块 | 鉴源论坛 观模 01 什么是面向界面的图形化测试(GUI Testing) 图形用户界面(GUI) 是一种通过图形化方式呈现信息、数据、功能和操作的用户界面,旨在…...
Midjourney以图生图的详细教程(含6种案例介绍)
🏆 文章目标:学习并介绍Midjourney以图生图的详细教程 🍀 Midjourney以图生图的详细教程 ✅ 创作者:熊猫Jay 🎉 个人主页:Jay的个人主页 🍁 展望:若本篇讲解内容帮助到您,…...
基于单片机的电路特性测试仪的设计
摘 要 当今社会科技的飞速发展,智能和便捷已经成为人们的日常诉求。现在放大电路在使用过程中经常出现故障,并且需要测试电路数据,但是大多数是手动进行测试,一定程度上影响了工作效率。 为了测量数据更安全更便捷,针…...
五一将迎2亿人次出行,君子签助力旅行社合规高效签旅游电子合同
近日,为规范旅游市场秩序,促进旅行社高质量发展,文旅部发布了《文化和旅游部办公厅关于进一步规范旅游市场秩序的通知》(下称《通知》),对旅游业提出了新的要求。 《通知》中规范了旅行社经营行为。旅行社要…...
IAP升级遇到的问题
文章目录 1. app程序在SystemClock_Config中跑飞2. 程序HAL_Delay中卡死3. 通过外部flash模拟的U盘没能被电脑识别4. 将bin文件拷贝到片内flash中失败5、APP程序跳转过后串口不能工作 这几天在STM32G473使用IAP升级的时候踩了不少坑 1. app程序在SystemClock_Config中跑飞 boo…...
简单聊聊k8s,和docker之间的关系
前言 随着云原生和微服务架构的快速发展,Kubernetes和Docker已经成为了两个重要的技术。但是有小伙伴通常对这两个技术的关系产生疑惑: 既然有了docker,为什么又出来一个k8s? 它俩之间是竞品的关系吗? 傻傻分不清。…...
半小时学会HTML5
一、了解几个概念 1、HTML定义 HTML是(Hyper Text Markup Language)超文本标记语言,超文本包含:文字、图片、音频、视频、动画等。 2、W3C 是什么? W3C 即(World Wide Web Consortium) 万维…...
研报精选230421
目录 【行业230421南京证券】氢能行业:地缘政治加速绿色能源转型 【行业230421华安证券】AIGC行业研究框架与投资逻辑 【行业230421信达证券】工控行业深度报告:行业拐点将至,国产品牌加速崛起 【个股230421国信证券_华阳集团】聚焦汽车智能化…...
AI绘图风格对照表/画风样稿详细研究记录及经验总结(分析Midjourney和Stable Diffusion风格提示词实际使用情况)不断更新中...
Midjourney和Stable Diffusion都可以通过输入文本生成出令人惊叹的AI图像。 Midjourney是一个收费的在线服务,通过discord对话的形式来生图,局限性较大,但由于后台官方模型做得好,因此出图效果非常完美; Stable Diffus…...
人工智能论文的风格特点
搞清楚AI领域论文的风格特点是写出一篇高质量AI论文的前提,AI领域的论文有如下显著特点。 1. 论文的架构非常清晰且富有逻辑。一篇高质量的AI论文,读者通过大致扫一眼论文的各级标题就能够对论文的写作思路形成清晰的认识,明白论文各部分之间…...
成功上岸国防科大!
Datawhale干货 作者:王洲烽,太原理工大学,Datawhale成员 写在前面 相比较于一般的经验贴,我更想在这里讲述一下自己的故事。我一开始报考的是北理工,但很遗憾9月份北理改考408了,无缘京爷,所以…...
VINS-Fusion 实战指南:从环境搭建到多传感器融合部署
1. VINS-Fusion入门:为什么选择这个多传感器融合方案 第一次接触VINS-Fusion是在做一个无人机定位项目时,当时试过各种开源SLAM方案,最后发现这个来自香港科技大学团队的工具在传感器融合方面确实有两把刷子。简单来说,它就像个聪…...
实战应用:通过快马ai生成c语言学生管理系统,练就综合编程能力
实战应用:通过快马AI生成C语言学生管理系统,练就综合编程能力 最近在复习C语言基础知识时,发现单纯看语法和做小练习效果有限。为了真正掌握编程能力,我决定用C语言开发一个完整的学生信息管理系统。这个项目虽然不大,…...
**发散创新:基于Python的鲁棒水印技术实战解析与代码实现**在多
发散创新:基于Python的鲁棒水印技术实战解析与代码实现 在多媒体内容日益泛滥的今天,数字水印技术已成为版权保护、防伪溯源和内容认证的核心手段之一。本文将深入探讨一种基于离散余弦变换(DCT)的鲁棒图像水印嵌入与提取算法&…...
HRN模型与PID控制结合:实时面部动画调节系统
HRN模型与PID控制结合:实时面部动画调节系统 1. 引言 想象一下,你正在制作一部动画电影,主角的面部表情需要精确到每一帧的微妙变化。传统的手工调整方式耗时耗力,而自动生成的表情又往往缺乏自然流畅的过渡。这就是为什么我们需…...
10分钟掌握AI-Render:在Blender中玩转Stable Diffusion的终极指南
10分钟掌握AI-Render:在Blender中玩转Stable Diffusion的终极指南 【免费下载链接】AI-Render Stable Diffusion in Blender 项目地址: https://gitcode.com/gh_mirrors/ai/AI-Render 你是否想过,在Blender这个强大的3D创作软件中,直接…...
obsidian-i18n:让Obsidian插件全面支持中文的效率提升方案
obsidian-i18n:让Obsidian插件全面支持中文的效率提升方案 【免费下载链接】obsidian-i18n 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-i18n Obsidian作为一款强大的知识管理工具,其丰富的插件生态极大扩展了核心功能。然而…...
ContextMenuManager:高效管理Windows右键菜单的全方案
ContextMenuManager:高效管理Windows右键菜单的全方案 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager Windows右键菜单是我们日常操作电脑时最常用的…...
5大核心功能打造专业直播录制系统:从入门到精通的全方位指南
5大核心功能打造专业直播录制系统:从入门到精通的全方位指南 【免费下载链接】DouyinLiveRecorder 项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveRecorder 一、核心价值:为什么选择这款直播录制工具 场景引导:当你需要保…...
告别改板焦虑!手把手教你用Ansys Slwave 2022R2搞定PCB信号完整性仿真(附S参数导出Pspice全流程)
告别改板焦虑!Ansys Slwave 2022R2信号完整性仿真实战指南 在高速PCB设计领域,信号完整性问题如同悬在硬件工程师头顶的达摩克利斯之剑。据统计,超过60%的硬件改板需求源于信号完整性问题未被提前发现。本文将带您深入掌握Ansys Slwave 2022R…...
springboot-vue基于web框架的高校教材征订管理系统的设计与实现
目录技术选型与架构设计核心功能模块划分数据库设计要点开发阶段规划关键技术实现方案部署与运维方案项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术选型与架构设计 后端技术栈 采用Spring Boot作为核心框架,整…...
