C语言基础知识 -- BCD码
// 压缩的BCD码 如 十进制123 对应 0x0123voidLongByteToBCD1(UINT8 longByte,UINT8*a){UINT16 bcd;bcd((longByte/100)8)(((longByte%100)/10)4)(longByte%10);*a(UINT8)(bcd8);*(a1)(UINT8)bcd;}UINT16BCDToLongByte(UINT16 bcd){return((bcd8)*100(((bcd%256)4)*10)(bcd%256%16));}BCD码的概念BCD码是Binary-Coded Decimal的缩写直译是二进制编码的十进制数核心本质是用一组二进制数来表示单个十进制数字0~9是专门为解决「计算机二进制存储」和「人类十进制使用」的衔接问题设计的编码方式也是嵌入式开发、数字电路、仪器仪表中最常用的编码之一之前看到的函数就是嵌入式里BCD码的典型应用。一、为什么需要BCD码计算机底层只能存储和运算二进制数但人类日常使用十进制二者直接转换会有问题普通二进制转十进制如0b101010是权值转换适合数值计算但如果是直接显示/传输十进制数字如数码管、液晶屏、串口传数字需要频繁做进制转换效率低硬件外设如数码管、BCD码计数器、实时时钟RTC本身只识别BCD码直接用BCD码存储数字能跳过进制转换直接对接硬件。简单说BCD码不是为了计算机“计算”而是为了计算机“和人类/硬件交互十进制数字”。二、BCD码的核心规则最基础的BCD码是8421-BCD码也是最常用的无特殊说明时BCD码均指它规则极其简单用4位二进制数表示1位十进制数字0~94位二进制的权值依次是8、4、2、1因此叫8421码按普通二进制计算即可得到对应十进制数4位二进制的取值范围仅用00001001**10101111对应十进制10~15是无效BCD码**绝对不会使用。三、基础BCD码编码表0~9这是8421-BCD码的核心对应关系记下来就能直接用嵌入式开发中会频繁接触十进制数字4位8421-BCD码十六进制表示方便书写000000x0100010x1200100x2300110x3401000x4501010x5601100x6701110x7810000x8910010x9关键提醒4位BCD码**没有1015的对应值**比如0b10100xA不是合法的BCD码在BCD码运算/存储中出现这个值就是错误的比如你之前的函数输入最大255拆分后十位、个位都是09刚好符合BCD码规则。四、BCD码的两种常用形式重点和你之前的代码强相关计算机的基本存储单位是字节8位而BCD码基础单位是4位因此衍生出非压缩BCD码和压缩BCD码两种形式其中压缩BCD码是你之前函数的核心必须重点理解。1. 非压缩BCD码也叫无符号BCD码规则1个字节8位存储1位十进制数字其中低4位是有效BCD码0000~1001高4位补0特点存储效率低但处理简单适合表示单个十进制数字或位数少且需要单独操作的数字例子十进制5→ 非压缩BCD码0000 01010x05十进制9→0000 10010x09。2. 压缩BCD码你之前代码的核心规则1个字节8位存储2位十进制数字其中高4位表示十位的BCD码低4位表示个位的BCD码特点存储效率高是嵌入式开发中表示**两位十进制数00~99**的标准方式也是数码管、RTC时钟的常用格式核心例子和你之前的函数完全对应十进制23→ 十位20010 个位30011→ 压缩BCD码0010 00110x23十进制55→ 十位50101 个位50101→ 压缩BCD码0101 01010x55十进制08→ 十位00000 个位81000→ 压缩BCD码0000 10000x08。五、多位十进制数的BCD码表示结合你之前的函数你之前的函数处理的是0~255的三位十进制数核心是把三位十进制数拆成「百位」「十位个位」分别用「非压缩BCD码」「压缩BCD码」存储这是嵌入式中三位十进制数的标准BCD码表示方式举两个核心例子和函数逻辑完全一致例子1十进制123函数输入longByte123拆分百位1、十位2、个位3百位1用1个字节非压缩BCD码→0000 00010x01十位个位23用1个字节压缩BCD码→0010 00110x23最终BCD码存储0x010x23就是函数中a[0]0x01a[1]0x23的结果。例子2十进制255UINT8最大值函数输入longByte255拆分百位2、十位5、个位5百位2非压缩BCD码0000 00100x02十位个位55压缩BCD码0101 01010x55最终BCD码存储0x020x55和之前函数的计算结果完全一致。例子3十进制5个位数函数输入longByte5拆分百位0、十位0、个位5百位0非压缩BCD码0000 00000x00十位个位05压缩BCD码0000 01010x05最终BCD码存储0x000x05函数的输出结果。六、BCD码和普通二进制的核心区别关键避免混淆很多新手会把BCD码和普通二进制搞混这里用同一个数值做对比一眼就能看清差异十进制数普通二进制8位压缩BCD码8位本质区别230001 01110x170010 00110x23普通二进制是权值计算结果BCD码是十进制数字的二进制编码拼接简单说普通二进制23是通过16421计算出来的二进制和十进制是运算关系BCD码23是把2的BCD码0010和3的BCD码0011直接拼起来二进制和十进制是编码拼接关系。七、BCD码的典型应用场景你会用到的BCD码几乎是嵌入式开发的标配尤其是和「数字显示/硬件交互」相关的场景数码管/液晶屏显示直接用BCD码驱动无需进制转换实时时钟RTC芯片内部的年、月、日、时、分、秒全部用压缩BCD码存储仪器仪表/串口通信传输十进制数字时用BCD码能避免传输错误解析更简单你之前看到的LongByteToBCD1函数嵌入式中把传感器/寄存器的8位数值转成BCD码用于后续显示/传输。总结BCD码核心要点BCD码8421**4位二进制表示1位十进制09**10101111是无效码两种形式非压缩BCD1字节存1位高4位补0、压缩BCD1字节存2位高4位十位低4位个位核心用途解决二进制存储和十进制交互的衔接问题适合嵌入式硬件/显示场景和普通二进制的区别BCD码是编码拼接普通二进制是权值运算你之前的函数把0~255的三位十进制数拆成「百位非压缩BCD 十位个位压缩BCD」存入两个连续字节。

相关新闻

计算机毕业设计之jsp基于SSM的网上家居商城系统的设计与实现

计算机毕业设计之jsp基于SSM的网上家居商城系统的设计与实现

随着我国经济的高速发展与人们生活水平的日益提高,人们对生活质量的追求也多种多样。尤其在人们生活节奏不断加快的当下,人们更趋向于足不出户解决各种问题,网上家居商城系统展现了其蓬勃生命力和广阔的前景。与此同时,为解决用户…

2026/7/3 15:29:43 阅读更多 →
InVivoMAb Anti-Mouse CD4:与同类型产品相比,成本效益显著

InVivoMAb Anti-Mouse CD4:与同类型产品相比,成本效益显著

在现代生命科学研究中,抗体药物已成为探索免疫机制、开发新药和治疗疾病的重要工具。其中,InVivoMAb anti-mouse CD4 作为一款高纯度、高活性的单克隆抗体,广泛应用于小鼠模型中的免疫细胞功能研究,是众多科研人员不可或缺的实验工…

2026/7/6 7:07:24 阅读更多 →
解决 Vue 3 项目 TypeScript 编译错误:@types/lodash 类型定义不兼容

解决 Vue 3 项目 TypeScript 编译错误:@types/lodash 类型定义不兼容

解决 Vue 3 项目 TypeScript 编译错误:types/lodash 类型定义不兼容 问题描述 在使用 Vue CLI 构建 Vue 3 项目时,运行 yarn build 命令出现编译失败,报错信息如下: ERROR Failed to compile with 4 errorserror in node_mod…

2026/7/5 19:22:28 阅读更多 →

最新新闻

3步解锁网易云音乐NCM加密文件:ncmdumpGUI完全使用指南

3步解锁网易云音乐NCM加密文件:ncmdumpGUI完全使用指南

3步解锁网易云音乐NCM加密文件:ncmdumpGUI完全使用指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 你是否曾因网易云音乐下载的NCM格式文件无法…

2026/7/6 11:07:19 阅读更多 →
Flex6方法论:用原子化交付重构按小时计费的信任逻辑

Flex6方法论:用原子化交付重构按小时计费的信任逻辑

1. 为什么“按小时计费”不是坑,而是专业团队的诚意标尺在软件开发行业混了十多年,我见过太多客户一听到“按小时收费”就皱眉,下意识觉得这是“无底洞”,是服务商在给自己留后门。我也见过太多团队为了签单,硬着头皮接…

2026/7/6 11:05:15 阅读更多 →
2026智能手表选购指南:健康监测与生态协同实战决策

2026智能手表选购指南:健康监测与生态协同实战决策

1. 这不是“榜单”,而是一份2026年4月智能手表选购的实战决策地图如果你最近刷到过“2026年最值得买的10款智能手表”这类标题,大概率会陷入一种熟悉的疲惫感:参数堆砌、品牌站队、价格分段模糊、实测数据缺失,最后点进去发现全是…

2026/7/6 11:05:15 阅读更多 →
大脑一片空白的庖丁解牛

大脑一片空白的庖丁解牛

因为**“大脑一片空白”**几乎每个人都经历过: 面试时,大脑突然空白;写代码时,盯着屏幕发呆;学习时,书翻开了,却不知道从哪里开始;遇到重大压力时,脑子像"死机"…

2026/7/6 11:05:15 阅读更多 →
AD74413R与PIC18LF45K80的SPI通信与数据采集实现

AD74413R与PIC18LF45K80的SPI通信与数据采集实现

1. AD74413R与PIC18LF45K80的硬件架构解析AD74413R是一款高度集成的模拟前端芯片,内部包含4个可独立配置的模拟输入通道。每个通道可通过寄存器配置为16位ADC输入或12位DAC输出模式。芯片采用SPI接口通信,最高支持10MHz时钟频率,内置基准电压…

2026/7/6 11:03:11 阅读更多 →
数据科学家的信号处理实战指南:时序特征工程与Python可落地方案

数据科学家的信号处理实战指南:时序特征工程与Python可落地方案

1. 这不是给电子工程师看的信号处理——而是一份数据科学家真正用得上的实操手册 “信号处理”四个字一出来,很多人脑子里立刻浮现出示波器、傅里叶变换公式、滤波器设计图,甚至还有人下意识翻出《奥本海姆信号与系统》——但我要先说清楚:这…

2026/7/6 11:01:07 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻