一、概述

  但在数电/模电领域,进制是电路信号编码与数据处理的基础——二进制对应电路的高低电平,十进制贴近人类认知,八进制与十六进制则是二进制的“简化表达”;而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
110 101 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
0001 1011 0110 1B6

2.2 八进制

  八进制含0-7八个符号,进位规则“逢八进一”,其核心价值是将3位二进制数简化为1位八进制数(2³=8)。C语言中八进制以“0”为前缀标识。

2.2.1 八进制转换二、十、十六进制

  八进制转二进制(一位拆三位法)。八进制每位对应二进制3位,不足三位在左侧补0。
示例

八进制 二进制
65 110101
65 110 101

  八进制转十进制(按权展开求和法)。权值为8的幂次(从右往左依次为8⁰、8¹、8²……)。
示例

八进制 十进制
66 54
6×8¹ + 6×8⁰ 48+6

  八进制转十六进制(先转二进制再分组)。先转二进制,再按“四位分组”转十六进制(高效无误差)。
示例

八进制 十六进制
66 36
借助二进制 110 110
0011 0110 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,将所有余数从后往前排列,即为八进制结果。
示例
10进制转换8进制

  十进制转十六进制(除 16 取余逆序法)。用十进制数除以 16,记录商和余数(余数 0-15,10-15 对应 A-F)。用得到的商继续除以 16,重复记录商和余数。直到商为 0,将所有余数(含字母)从后往前排列,即为十六进制结果。
示例
10进制转换16进制

2.4 十六进制

  十六进制含0-F十六个符号,进位规则“逢十六进一”,其核心价值是将4位二进制数简化为1位八进制数(2⁴=16)。C语言中八进制以0x”为前缀标识。

2.4.1 十六进制转换二、八、十进制

  十六进制转二进制(一位拆四位法)。十六进制每位数字(0-9、A-F)对应 4 位二进制数。不足 4 位的在左侧补 0,将每位对应的二进制数依次拼接。最终结果可省略前导 0(保留有效数字)。
示例

十六进制 二进制
1B6 110110110
1B6 0001 1011 0110

  十六进制转十进制(按权展开求和法)。 确定十六进制数字的位数,从右往左标权值(16⁰、16¹、16²……)。每位数字(0-9、A-F 对应 10-15)乘以对应权值。所有乘积求和,结果即为十进制数。
示例

十六进制 十进制
35 53
3×16¹+5×16⁰ 53

  十六进制转八进制(先转二进制再分组)。先将十六进制转二进制(一位拆四位)。二进制数从右往左每 3 位分一组,不足 3 位左侧补 0。每组对应八进制数字(0-7),拼接后即为结果。
示例

十六进制 八进制
6B 153
借助二进制 0110 1011
001 101 011 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语言语法实现→实际开发场景”的全链路逻辑,是嵌入式开发中操控硬件、编写高效代码的核心前提。
  谢谢大家的观看阅读,如果有不懂或者不理解的地方欢迎私信为你解答!

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐