最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言:十進制,BCD碼互換詳解

 更新時間:2021年09月01日 16:42:06   作者:不脫發(fā)的程序猿  
這篇文章主要介紹了C語言十進制,BCD碼互換實例,小編覺得這篇文章寫的還不錯,實例簡單明了,需要的朋友可以參考下

最近寫單片機 RTC 日期、時間配置,需要實現(xiàn)十進制、BCD碼互換,將示例Demo分享給各位朋友:

BCD是指用二進制來表示十進制數(shù)的編碼,即:用4位二進制來表示一位十進制數(shù),因此4位二進制數(shù)表示最大的十進制數(shù)9(1001)。

一個四位的BCD碼不能夠表達十進制的兩位數(shù),因此當(dāng)數(shù)字大于九時,我們需要用八位BCD碼來表示。高位只需要逢九進一即可。

十進制是逢十進一,而十六進制是逢十六進一,它們之間的每次進位差6,所以一個十進制數(shù)要轉(zhuǎn)換成BCD碼,要先算清多進位的位數(shù)。

當(dāng)兩個BCD碼相加,如果和等于或小于 1001(即十進制數(shù)9),不需要修正。

如果相加之和在 1010 到1111(即十六進制數(shù) 0AH~0FH)之間,則需加 6 進行修正。

例如,十進制99進位了99/10=9次,每次進位和十六進制進位相比差6,所以一共差了9×6=54,即BCD碼為:99+54=153(十六進制:0X99)。BCD碼轉(zhuǎn)化成十進制碼也一樣原理。

1、復(fù)雜版

十進制轉(zhuǎn)換為BCD碼,代碼如下所示:

int decimal_bcd_code(int decimal)
{
	int sum = 0;  //sum返回的BCD碼
 
	for (int i = 0; decimal > 0; i++)
	{
		sum |= ((decimal % 10 ) << ( 4*i));
 
		decimal /= 10;
	}
 
	return sum;
}

BCD碼轉(zhuǎn)換為十進制,代碼如下所示:

int bcd_decimal_code( int bcd)
{
	int sum = 0, c = 1;  // sum返回十進制,c每次翻10倍
 
	for(int i = 1; bcd > 0; i++)
	{
		if( i >= 2)
		{
			c*=10;
		}
 
		sum += (bcd%16) * c;
 
		bcd /= 16;  // 除以16同理與十進制除10將小數(shù)點左移一次,取余16也同理
	}
 
	return sum;
}

2、簡易版

十進制轉(zhuǎn)換為BCD碼,代碼如下所示

int bcd_decimal_code( int bcd)
{
    return (bcd + (bcd/10) * 6);
}

BCD碼轉(zhuǎn)換為十進制,代碼如下所示

int decimal_bcd_code(int decimal)
{
    return (decimal - (decimal>>4) * 6);
}

參考資料:

1、十進制與BCD碼轉(zhuǎn)換的算法

2、十進制轉(zhuǎn)BCD碼在線工具

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C++?OpenCV裁剪圖片時發(fā)生報錯的解決方式

    C++?OpenCV裁剪圖片時發(fā)生報錯的解決方式

    在圖像處理中,我們經(jīng)常根據(jù)需要截取圖像中某一區(qū)域做處理,下面這篇文章主要給大家介紹了關(guān)于C++?OpenCV裁剪圖片時發(fā)生報錯的解決方式,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 最新評論

    白城市| 苍南县| 柳州市| 平定县| 忻州市| 亚东县| 许昌市| 惠水县| 香港| 湾仔区| 盐亭县| 丰原市| 广汉市| 湘潭市| 南郑县| 名山县| 惠水县| 绥芬河市| 特克斯县| 额尔古纳市| 若尔盖县| 望城县| 枣强县| 铜鼓县| 和硕县| 正安县| 武陟县| 嘉兴市| 宁夏| 县级市| 珠海市| 武陟县| 湘西| 县级市| 平塘县| 东乌珠穆沁旗| 礼泉县| 合作市| 应城市| 怀集县| 定边县|