gpt4 book ai didi

arduino - BCD转十进制和十进制转BCD

转载 作者:行者123 更新时间:2023-12-04 03:04:43 25 4
gpt4 key购买 nike

我正在写 图书馆 对于 实时时钟模块阿杜诺其中数据以 BCD 格式存储。我知道如何将十进制数转换为 BCD,但是在以编程方式编写时遇到了一些问题。在互联网上搜索后,我得到了两个公式,如下所示并且工作完美,但无法理解它是如何计算的。

1. 一级方程式

DEC 转 BCD

(value / 10 * 16) + (value % 10)

示例

十二月 -> 40 转换为 01000000 BCD 再次等于 64。

因此,如果我输入公式,我会得到相同的结果。
(40/10 * 16) + (40%10)
= (4*16) + 0
= 64

BCD 到 DEC
(value / 16 * 10) + (value % 16)

2.公式2

DEC 转 BCD
val + 6 * (val / 10)

BCD 到 DEC
val - 6 * (val >> 4)

如果有人可以详细解释它会有所帮助。

提前感谢大家。

最佳答案

正确的转换函数是:

byte bcdToDec(byte val)
{
return( (val/16*10) + (val%16) );
}

byte decToBcd(byte val)
{
return( (val/10*16) + (val%10) );
}

为什么这行得通?让我们取一个数字 5。在二进制中,它是
0101 = 5 

现在让我们取相同的数字,通过在右侧添加四个零将其向左移动四位:
0101 0000 = 50 BCD

这就是 BCD 的工作原理。由于需要四个二进制数字来表示十进制数字 0 到 9,因此每个十进制数字由四个位表示。关键是 在二进制中移动四位乘或除以 16 ,这就是 16 的原因公式中的值。

所以让我们取96:
0110 = 6
1001 = 9
1001 0110 = 96 BCD

关于arduino - BCD转十进制和十进制转BCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45655484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com