前言:
而今姐妹们对“二进制转化为十进制代码c语言代码”大概比较注重,大家都需要分析一些“二进制转化为十进制代码c语言代码”的相关文章。那么小编也在网上网罗了一些有关“二进制转化为十进制代码c语言代码””的相关内容,希望各位老铁们能喜欢,朋友们一起来了解一下吧!BCD码(Binary-Coded Decimal),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使二进制和十进制之间的转换得以快捷的进行。BCD码也称二进码十进数,BCD码可分为有权码和无权码两类。其中,常见的有权BCD码有8421码、2421码、5421码,无权BCD码有余3码、余3循环码、格雷码。
一般来说,默认的BCD码是8421码,也就是说,使用4位二进制数来表示10位0-9的1位十进制数。从左到右的重量是8,4,2,1。
以十进制37为例,进行转换:
3=2+1=(8421码)0011,7=4+2+1=(8421码)0111。
所以37转换成8421码为0011 0111,即0x37表示。
为了方便使用,本文提供了BCD和二进制之间相互转换的具体实现。函数的实现原理比较简单,对于第一个函数Bcd2ToByte,先对BCD数取其高四位,右移四位,再乘以10,作为十位数字;再取其第四位作为个位数字;两者作和,则为对应的二进制数转换结果。第二个ByteToBcd2,在循环中每减一个10,对bcdhigh加1,而变量bcdhigh 用以累计十位数值,减到不够10以后,那就剩个位了,直接或在bcdhigh 左移四位的后面就是对应BCD的转换结果。
直接可用程序如下:
#include <stdio.h>
typedef unsigned char uint8_t;
typedef unsigned int uint32_t;
// BCD转换为二进制
static uint8_t Bcd2ToByte(uint8_t Value)
{
uint32_t tmp = 0U;
tmp = ((uint8_t)(Value & (uint8_t)0xF0) >> (uint8_t)0x4) * 10U;
return (tmp + (Value & (uint8_t)0x0F));
}
//二进制转换为BCD
static uint8_t ByteToBcd2(uint8_t Value)
{
uint32_t bcdhigh = 0U;
while (Value >= 10U)
{
bcdhigh++;
Value -= 10U;
}
return ((uint8_t)(bcdhigh << 4U) | Value);
}
int main()
{
uint8_t val = 0x19;
uint8_t val2 = 99;
printf("BCD: 0x%X --> Binary: %d \n", val, Bcd2ToByte(val));
printf("Binary: %d --> BCD: 0x%X \n", val2, ByteToBcd2(val2));
return 0;
}
运行结果:
标签: #二进制转化为十进制代码c语言代码 #c语言bcd码转换 #bcd码转10进制 #bcd转换为二进制数计算器 #c语言重量转换