计算机基础:二进制基础13,十六进制与二进制的相互转换

server/2025/3/18 13:28:42/

专栏导航

本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。

(一)WIn32 专栏导航

上一篇:计算机基础:二进制基础12,十进制数转换为十六进制

回到目录

下一篇:无

(二)MFC 专栏导航

上一篇:计算机基础:二进制基础12,十进制数转换为十六进制

回到目录

下一篇:无

本节前言

关于进制的知识,本专栏算是快要讲解完了。本节,算是我们讲解进制知识的最后一节了。希望大家坚持住啊。

本节,我们来讲解十六进制与二进制的想换转换。

一.    十六进制转为二进制数

我们来画一个表格,来对举值相同的十六进制,十进制与二进制数。

在标识二进制数的时候,我将每个二进制数,固定地,用 4 位来表示。

十进制二进制十六进制
000000
100011
200102
300113
401004
501015
601106
701117
810008
910019
101010A
111011B
121100C
131101D
141110E
151111F

在所举出的表格里面,我是将十进制与八进制的 0 到 15 都给列出来了。相对应地,我也将十六进制的 0 到 F 都给列出来了。

之所以在上表中列出十进制,是为了以一种大家熟悉的方式,标出每一行的数值。

然后呢,我们看到,十六进制里面的每一个标记符号,0 到 F 中的任何一个,都可以标记为 4 位二进制数。而且,4 位二进制数,它是形成了一个完全的排列。

四位二进制数,每一位仅可以为 0 或 1,不可以有其他的标记。每一位,有两种表示方法,0 和 1,两位的话,就有着 2×2 种排列方法,共计 4 排列方法。三位二进制数,那就有着 2×2×2 种排列方法,为 8 种排列方法。四位二进制数,那就有着 2×2×2×2 种排列方法,为 16 种排列方法。

在这里,我们直接给出结论,想要将一个十六进制数转换为二进制数,只需要将十六进制数的各个数位,改写为对应的四位二进制数,然后将不同数位的转换结果连缀起来就可以了。转换为二进制的过程中,每一位二进制数,需要固定为四位。

举例来说,我们想要将十六进制数 E3C6 转换为 对应的二进制数。我们查表,十六进制数 E 的对应二进制数为 1110,十六进制数 3 对应的二进制数为 0011,十六进制数 C 的对应二进制数为 1100,十六进制数 6 的对应二进制数为 0110 。我们将这四个转换结果连缀起来,就成了 1110001111000110,这个数就是十六进制数 E3C6 所对应的二进制数了。刚才的转换结果看着有点费劲儿,那么,我们从右边数,让它每四位一组,最左边若是不足四位,也算作一组,组与组之间以空格来分隔,结果为 1110 0011 1100 0110 。

我们再来举一个例子,我们将十六进制数 61 转换为 对应的二进制数。十六进制数 6 对应的二进制数为 0110,十六进制数 1 对应的四位二进制数为 0001。所以,十六进制数 61 对应的二进制数为 01100001,带有空格分隔的书写形式为 0110 0001 。

在转换完了以后,有时,我们需要对结果进行一下美化。

比如说,我们上面提到的十六进制数 61,它转换为二进制数以后,结果为 0110 0001,左边有一个连续的0,我们为了简化一些,可以将这个左边的0给去掉,就变为了 110 0001,然后,再在左边加上 0B 前缀,最终结果为 0B 110 0001 。

再比如说,十六进制数 12 对应的二进制数为 00010010,它左边有连续的三个0,我们可以把左边的连续的三个 0 都给去掉,变为 10010,再加上前缀 0B,就变为了 0B 10010 。

到了这里,十六进制转换为二进制数的方法,我就讲完了。

二.    二进制数转换为十六进制数

我们在第一分节中知道,一位十六进制数与四位二进制数是一一对应的,这样一来,我们想要将二进制数转换为十六进制数,基本的方法就是将四位二进制数转换为对应的一位十六进制数就好了。

说是这么说,实际去做的时候,还需要进行一点额外的处理。

我们来看二进制数 10010011 转为十六进制的过程。

首先呢,我们将这个 8 位二进制数,从右往左,每四位一组,于是,这个数变为 1001-0011,在这里,分隔符【-】是我加上去的,在你那里,你也可以使用空格来作为分隔符,也可以使用下划线等等的符号。

分隔好了以后,每一组,将其转换为对应的一位十六进制数。

左边的一组,二进制 1001,它对应的十六进制数为 9 。右边的一组,二进制数 0011,它对应的十六进制数为 3 。所以,二进制数 10010011 转换为十六进制数的结果为 93 。

我们再来看一个例子,将二进制数 110101000011 转换为八进制数。

首先呢,将这个二进制数分组,四位一组,结果为 1101-0100-0011 。

分好了以后,每一组都将其转换为对应的一位十六进制数。二进制数 1101 的转换结果为 D,二进制数 0100 的转换结果为 4,二进制数 0011 的转换结果为 3 。所以呢,二进制数 110101000010 对应的十六进制数为 D43 。

以上,我所举的两个例子,一个是 8 位二进制数,一个是 12 位二进制数,都是说,二进制数的总的位数正好是 4 的整数倍 。如果某一个二进制数,它的位数不是 4 的整数倍,比如说,它是 5 位的,或者是 7位的, 14 位的,在这个时候,我们如何来转换呢?

当二进制数的位数不是 4 的整数倍的时候,我们需要将这个二进制数的左边补上0,让它正好凑成位数是 4 的整数倍。

比如说,一个 6 位的二进制数,我们可以在其左边补上两个 0,形成一个 8 位的二进制数。如果某二进制数是 11 位的,我们可以在其左边补上 1 个0,形成 12 位的二进制数。

我们还是来举两个例子来说明。

(一)将二进制数 101100 转为十六进制数

101100,它是 6 位的二进制数,我们在它的左边补上两个 0,变为 00101100 。

接下来,我们对二进制数 00101100 进行十六进制转换。

首先呢,对其进行四位一组的划分,划分结果为 0010-1100 。

然后呢,对每一组进行十六进制转换,0010 转为 2,1100 转为 C 。所以,二进制数 101100 的对应十六进制数为 2C 。

(二)将二进制数 11101101101 转为十六进制数

本二进制数有 11 位,我们在其左边补上 1 个 0,就成了 12 位的二进制数了,结果为 011101101101 。

接下来,我们对二进制数 011101101101 进行十六进制转换。

首先呢,是四位一组的划分,结果为 0111-0110-1101 。

然后呢,是对每一组的十六进制转换,0111 的转化结果为 7,0110 的转换结果为 6,1101 的转换结果为 D。

所以,二进制数 11101101101 转为十六进制数的结果为 76D 。

(三)    补 0 的另一种方法

对于补 0 这一步骤,我们也可以采用另一种方法。我们举例来说明。

比如说,101001,这个数,我们首先对其进行四位一组的划分,形成的结果是 10-1001,最左边的一组有两个数位,再补上两个 0,就变为 4 位了,所以呢,101001 的格式化结果为 00101001 。

再比如,101101000,这个数,我们进行四位一组的划分,结果为 1-0110-1000,最左边的一组是 1 位。这个时候,我们将其补上三个 0 就变为 4 位了。结果为 000101101000 。

再比如 11001001,这个数,我们对其进行四位一组的划分,结果为 1100-1001,最左边的一组刚好是 4 位,我们无须补 0 。

补0 的新方法的步骤是,先对给定的二进制数进行划分,从右往左数,每四位一组。划分最左边的时候,无论是否够四位数,都将其作为一组来看待。

这个时候,如果最左边是 4 位数,则无须补 0 。如果最左边是 1 位数,则在左边补上三个 0 。如果最左边是两位数,则在最左边补上两个 0 。如果最左边是 3 位数,则在左边补上 1 个 0 。

结束语

二进制,八进制,十六进制,这些个进制知识,我总算是讲完了。

在写博客的时候,好多的东西,写起来,都会让我觉得犯愁。比如说,在写短除法的时候,需要去画图。画图,目前来讲,我还不是很擅长。好在,我自己的一点画图知识,算是完成了画图任务。

在这里,我所讲的进制知识,我仅仅是讲解了整数部分,更进一步地,我讲的是无符号整数的部分。而对于浮点数,我是没有去讲的。

关于浮点数,我认为,这是一个比较难的部分。如果以后有机会的话,我会专门地去讲解的。而在 MFC 与 Win32 专栏里面,我估计我不会去讲浮点数的表示方法。

如果以后,我开设了汇编语言专栏的话,那么,我应该会去讲解浮点数的表示法的。

在讲解进制知识的时候,我仅仅是讲解了无符号的表示方法。也就是,在涉及进制知识的几个章节里面,我所用的二进制,八进制和十六进制,仅仅是表示了大于等于 0 的自然数。而对于负整数,是没有涉及的。

那么,如何来表示负整数呢?

这就涉及了编码的知识了。

在我们的 Win32 与 MFC 专栏里面,编码知识,我也准备去讲。并且呢,从下一节开始,我们就会去讲解编码知识的。

欲知编码知识如何,且听下回分解。

专栏导航

本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。

(一)WIn32 专栏导航

上一篇:计算机基础:二进制基础12,十进制数转换为十六进制

回到目录

下一篇:无

(二)MFC 专栏导航

上一篇:计算机基础:二进制基础12,十进制数转换为十六进制

回到目录

下一篇:无


http://www.ppmy.cn/server/175967.html

相关文章

EasyExcel动态拆分非固定列Excel表格

使用EasyExcel动态拆分非固定列Excel表格 在Excel数据解析场景中,​动态列结构拆分是典型挑战(如供应链系统中不同品类的属性字段差异较大)。传统基于POJO映射的方案无法应对列数量不固定的场景。本方案采用EasyExcel的动态模型解析和Map数据…

C++之list类及模拟实现

目录 list的介绍 list的模拟实现 定义节点 有关遍历的重载运算符 list的操作实现 (1)构造函数 (2)拷贝构造函数 (3)赋值运算符重载函数 (4)析构函数和clear成员函数 (5)尾…

C# ManualResetEvent‌的高级用法

一、ManualResetEvent 的核心作用‌ ManualResetEvent 是 C# 中用于 ‌线程同步‌ 的类(位于 System.Threading 命名空间),通过信号机制控制线程的等待与执行。其核心功能包括: 阻塞线程‌:调用 WaitOne() 的线程会等…

【实测闭坑】LazyGraphRAG利用本地ollama提供Embedding model服务和火山引擎的deepseek API构建本地知识库

LazyGraphRAG 2024年4月,为解决传统RAG在全局性的查询总结任务上表现不佳,微软多部门联合提出Project GraphRAG(大模型驱动的KG);2024年7月,微软正式开源GraphRAG项目,引起极大关注&#xff0c…

【前端面试题】宏任务与微任务的区别

宏任务与微任务的区别 JavaScript采用单线程模型,通过 事件循环(Event Loop) 机制处理异步操作。 类比于厨师上菜的过程,顾客点的菜可能存在容易处理的 “软菜” 与难处理的 “硬菜” ,以及要加米饭酒水这些立马可以上…

Java常用设计模式

设计模式是软件开发中解决常见问题的模板或指南。Java中的23种设计模式通常被分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)和行为型模式(Behavioral Patterns&#xff09…

python脚本实现服务器内存和cpu使用监控,并记录日志,可以设置阈值和采样频率

Python 脚本,实现以下功能: 按日期自动生成日志文件(例如 cpu_mem_20231001.csv)当 CPU 或内存超过阈值时触发记录独立记录报警事件(保存到 alert.log)支持自定义阈值和监控间隔 脚本代码 import psutil …

HCIA-PPP

一、基本概念 1、定义:PPP 协议是一种数据链路层协议,在两点之间建立直接通信连接。常用于拨号上网、宽带接入、路由器间通信等。 2、核心功能: ①链路控制:建立、配置和测试数据链路连接。 ②网络层协议支持:支持…