BCD到十进制:
#include <stdio.h>
int main()
{
int decimalNumber = 35; // 要转换为BCD码的十进制数
int tens = decimalNumber / 10;
int ones = decimalNumber % 10;
// 将十位和个位转换为BCD码
char bcd = (tens << 4) | ones; //0011 0000
printf("十进制数 %d 转换为BCD码为: 0x%X\n", decimalNumber, bcd);
return 0;
}
//最后输出0X35
分析:
先分别取该十进制的十位和个位,
然后将十位左移4位(尽管此时十位是十进制数,但是你写了左移运算符,编译器就会在内部以二进制形式表示该十进制),
最后与个位相或就好了。
十进制到BCD:
#include <stdio.h>
int BCD_to_Decimal(unsigned char bcd)
{
int decimal = 0;
// 获取十位和个位数字
int tens = (bcd >> 4) & 0x0F;
int ones = bcd & 0x0F;
// 将十位数值乘以10,然后加上个位数值
decimal = (tens * 10) + ones;
return decimal;
}
int main()
{
unsigned char bcd = 0x23; // 23的BCD码表示
int decimal = BCD_to_Decimal(bcd);
printf("BCD码 0x%X 转换为十进制数为: %d\n", bcd, decimal);
return 0;
}
分析:
取到tens
后,尽管在内部以二进制形式表示,但在计算过程中,它会被当做十进制数值 2
来处理