C语言结合数电/模电中的二进制、八进制、十进制、十六进制转换详解
C语言结合数电/模电的二进制、八进制、十进制、十六进制详解
一、概述
但在数电/模电领域,进制是电路信号编码与数据处理的基础——二进制对应电路的高低电平,十进制贴近人类认知,八进制与十六进制则是二进制的“简化表达”;而C语言作为嵌入式开发的核心语言,直接承担着将进制逻辑转化为硬件可执行代码的桥梁作用。本文将从“硬件本质-语法规则-代码实现-实际应用”全链路,详解四种进制的关联与实操。
1.1核心认知:进制与数电/模电的底层关联
进制的本质是“计数进位规则”,其基数决定了每一位的权重。在硬件层面,这种规则直接映射为电路的工作模式,而C语言则通过语法定义实现对硬件进制逻辑的操控,三者的关联如下表所示:
| 进制类型 | 数电/模电底层逻辑 | C语言核心作用 |
|---|---|---|
| 二进制(基数2) | 最核心进制,对应晶体管“导通/截止”(高电平1/低电平0),是触发器、寄存器等存储单元的基本编码方式 | 通过位运算直接操作硬件寄存器位,实现信号控制(如GPIO引脚电平翻转) |
| 八进制(基数8) | 3位二进制的聚合(2³=8),简化二进制指令编码,早期计算机指令集常用 | 简化二进制代码书写,尤其在操作3位一组的硬件信号时(如某些通信协议的校验位) |
| 十进制(基数10) | 硬件无原生支持,需通过BCD码(8421码等)转换为二进制电路实现,用于数码管、LCD等显示场景 | 默认输入输出进制,贴近人类交互,需通过库函数完成与二进制的转换 |
| 十六进制(基数16) | 4位二进制的聚合(2⁴=16),适配8位/16位/32位处理器的字节存储(1字节=2位十六进制) | 嵌入式开发主流进制,用于表示内存地址、寄存器值、颜色编码等 |
二、各进制详解:C语言中应用
2.1 二进制
二进制仅含0和1两个符号,进位规则为“逢二进一”。
2.1.1 二进制转换八、十、十六进制
二进制转八进制(三位分组法)。从二进制数的右边开始,每三位分为一组,不足三位的在左边补0(整数部分)。每组对应一个八进制数字(0-7),对照二进制与八进制的对应关系,将每组对应的八进制数字依次拼接,得到结果。
示例(查表附后):
| 二进制 | 八进制 |
|---|---|
| 110101 | 65 |
| 65 |
二进制转十进制(按权展开求和法),确定二进制数字的位数,从右往左给每一位标上“权值”(2⁰、2¹、2²……依次递增)。用每一位的数字(0或1)乘以对应位置的权值。将所有乘积结果相加,总和就是对应的十进制数。
示例:
| 二进制 | 十进制 |
|---|---|
| 1101 | 13 |
| 1×2³ +1 ×2² + 0×2¹ + 1×2⁰ | 8+0+2+1 |
二进制转十六进制(四位分组法),从二进制数的右边开始,每四位分为一组,不足四位的在左边补0(整数部分)。每组对应一个十六进制数字(0-9、A-F,其中10=A、11=B……15=F)。 将每组对应的十六进制数字依次拼接,得到结果。
示例:
| 二进制 | 十六进制 |
|---|---|
| 110110110 | 1B6 |
| 1B6 |
2.2 八进制
八进制含0-7八个符号,进位规则“逢八进一”,其核心价值是将3位二进制数简化为1位八进制数(2³=8)。C语言中八进制以“0”为前缀标识。
2.2.1 八进制转换二、十、十六进制
八进制转二进制(一位拆三位法)。八进制每位对应二进制3位,不足三位在左侧补0。
示例:
| 八进制 | 二进制 |
|---|---|
| 65 | 110101 |
| 65 |
八进制转十进制(按权展开求和法)。权值为8的幂次(从右往左依次为8⁰、8¹、8²……)。
示例:
| 八进制 | 十进制 |
|---|---|
| 66 | 54 |
| 6×8¹ + 6×8⁰ | 48+6 |
八进制转十六进制(先转二进制再分组)。先转二进制,再按“四位分组”转十六进制(高效无误差)。
示例:
| 八进制 | 十六进制 |
|---|---|
| 66 | 36 |
| 借助二进制 |
|
| 36 |
2.3 十进制
十进制含0-9十个符号,进位规则“逢十进一”。8421 BCD码是最常用的编码方式,用4位二进制数表示1位十进制数(如十进制5对应BCD码0101)。
2.3.1 十进制转换二、八、十六进制
十进制转二进制(除 2 取余逆序法)。用十进制数除以 2,记录商和余数(余数只能是 0 或 1)。用得到的商继续除以 2,重复记录商和余数。直到商为 0,将所有余数从后往前排列,即为二进制结果。
示例:
十进制转八进制(除 8 取余逆序法)。 用十进制数除以 8,记录商和余数(余数范围 0-7)。 用得到的商继续除以 8,重复记录商和余数。直到商为 0,将所有余数从后往前排列,即为八进制结果。
示例:
十进制转十六进制(除 16 取余逆序法)。用十进制数除以 16,记录商和余数(余数 0-15,10-15 对应 A-F)。用得到的商继续除以 16,重复记录商和余数。直到商为 0,将所有余数(含字母)从后往前排列,即为十六进制结果。
示例:
2.4 十六进制
十六进制含0-F十六个符号,进位规则“逢十六进一”,其核心价值是将4位二进制数简化为1位八进制数(2⁴=16)。C语言中八进制以0x”为前缀标识。
2.4.1 十六进制转换二、八、十进制
十六进制转二进制(一位拆四位法)。十六进制每位数字(0-9、A-F)对应 4 位二进制数。不足 4 位的在左侧补 0,将每位对应的二进制数依次拼接。最终结果可省略前导 0(保留有效数字)。
示例:
| 十六进制 | 二进制 |
|---|---|
| 1B6 | 110110110 |
| 1B6 |
十六进制转十进制(按权展开求和法)。 确定十六进制数字的位数,从右往左标权值(16⁰、16¹、16²……)。每位数字(0-9、A-F 对应 10-15)乘以对应权值。所有乘积求和,结果即为十进制数。
示例:
| 十六进制 | 十进制 |
|---|---|
| 35 | 53 |
| 3×16¹+5×16⁰ | 53 |
十六进制转八进制(先转二进制再分组)。先将十六进制转二进制(一位拆四位)。二进制数从右往左每 3 位分一组,不足 3 位左侧补 0。每组对应八进制数字(0-7),拼接后即为结果。
示例:
| 十六进制 | 八进制 |
|---|---|
| 6B | 153 |
| 借助二进制 |
|
| 153 |
2.5 十进制小数转换二、八、十六进制
2.5.1 转二进制
逻辑:整数部分(0)+ 小数部分(乘 2 取整)
剩余八进制也是和二进制同理。转八进制(₈):整数部分(0)+ 小数部分(乘 8 取整);转十六进制(₁₆):整数部分(0)+ 小数部分(乘 16 取整)。
2.6 进制转换总结
1、二进制转十进制用 “按权展开求和”,转八进制用 “三位分组”,转十六进制用 “四位分组”。
2、八进制转二进制用 “一位拆三位”,转十进制用 “按权展开求和”,转十六进制可先转二进制再 “四位分组”。
3、十进制转二进制用 “除 2 取余逆序”,转八进制用 “除 8 取余逆序”,转十六进制用 “除 16 取余逆序”。
4、十六进制转二进制用 “一位拆四位”,转十进制用 “按权展开求和”,转八进制先转二进制再 “三位分组”。
2.7 八进制与二/十/十六进制对照表格
| 二进制数 | 八进制数 | 十进制数 | 十六进制数 |
|---|---|---|---|
| 000 | 0 | 0 | 0 |
| 001 | 1 | 1 | 1 |
| 100 | 4 | 4 | 4 |
| 111 | 7 | 7 | 7 |
| 1000 | 10 | 8 | 8 |
| 1010 | 12 | 10 | A |
| 1100 | 14 | 12 | C |
| 1111 | 17 | 15 | F |
| 10110 | 26 | 22 | 16 |
| 11101 | 35 | 29 | 1D |
| 110101 | 65 | 53 | 35 |
| 1101011 | 153 | 107 | 6B |
| 10111011 | 273 | 187 | BB |
2.8 快速计算
以上方法为应对考试,快捷办法就是使用进制在线转换器。这个用着很方便,基本不出错,但进制转换的原理,是必须要明白的。
在线转换网址:https://tool.lu/hexconvert/
三、进制是硬件与软件的“通用语言
二进制是数电/模电的物理基础,十进制是人类交互的桥梁,八进制与十六进制是二进制的简化工具;而C语言通过语法定义(前缀、格式符)和位运算,实现了这些进制与硬件逻辑的无缝衔接。掌握“硬件进制本质→C语言语法实现→实际开发场景”的全链路逻辑,是嵌入式开发中操控硬件、编写高效代码的核心前提。
谢谢大家的观看阅读,如果有不懂或者不理解的地方欢迎私信为你解答!
openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。
更多推荐



所有评论(0)