欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù),因此當數(shù)字大于九時,我們需要用八位BCD碼來表示。高位只需要逢九進一即可。

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

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

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

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

1、復雜版

十進制轉換為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碼轉換為十進制,代碼如下所示:

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、簡易版

十進制轉換為BCD碼,代碼如下所示

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

BCD碼轉換為十進制,代碼如下所示

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

參考資料:

1、十進制與BCD碼轉換的算法

2、十進制轉BCD碼在線工具

總結

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

相關文章

  • COLORREF,COLOR,RGB,CString的轉化總結分析

    COLORREF,COLOR,RGB,CString的轉化總結分析

    實際的軟件開發(fā)過程中,常需要用到非.net平臺的代碼。這時候就可能碰到ColorRef(也就是以int類型代表的顏色值或是以DWORD值表示的顏色)。這跟.net平臺下的顏色的相互轉換MS并沒有直接實現(xiàn)
    2013-09-09
  • C語言中實現(xiàn)“17進制”轉“10進制”實例代碼

    C語言中實現(xiàn)“17進制”轉“10進制”實例代碼

    這篇文章主要介紹了C語言中實現(xiàn)“17進制”轉“10進制”實例代碼的相關資料,需要的朋友可以參考下
    2017-05-05
  • Qt學習教程之表格控件螞蟻線詳解

    Qt學習教程之表格控件螞蟻線詳解

    如果有用過PS的選區(qū)工具應該就會知道螞蟻線是什么東西了,就是用來表示選區(qū)的一種虛線,關鍵還是要動態(tài)的!下面這篇文章主要給大家介紹了關于Qt學習教程之表格控件螞蟻線的相關資料,需要的朋友可以參考下
    2018-07-07
  • OpenCV實現(xiàn)拼圖算法

    OpenCV實現(xiàn)拼圖算法

    這篇文章主要為大家詳細介紹了OpenCV實現(xiàn)拼圖算法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 380行C++代碼實現(xiàn)掃雷小游戲

    380行C++代碼實現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細介紹了380行C++代碼實現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • C++進程鏈接工具之通信器詳解

    C++進程鏈接工具之通信器詳解

    本文主要介紹了C++通信器的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-11-11
  • Qt Designer的簡單使用方法

    Qt Designer的簡單使用方法

    用 C++ 代碼編寫圖形界面的問題就是不直觀,因此 Qt 項目開發(fā)了專門的可視化圖形界面編輯器,本文就詳細的介紹一下
    2021-08-08
  • C語言大小端字節(jié)序存儲模式深入解讀

    C語言大小端字節(jié)序存儲模式深入解讀

    我們知道,當編譯器執(zhí)行 “創(chuàng)建變量” 這一代碼時,會在內存中開辟空間相應的空間來存儲變量值。而對于整型變量而言,變量值又是以二進制補碼的形式存放的
    2022-09-09
  • c++中for雙循環(huán)的那些事

    c++中for雙循環(huán)的那些事

    本人很菜,今天看《C++編程思想》中的一道課后題中說到這樣一個問題。修改兩層嵌套的for循環(huán)的標識符,觀察結果變化
    2013-05-05
  • C++中測試程序運行時間的幾種方法總結

    C++中測試程序運行時間的幾種方法總結

    本文介紹了C++中測量程序運行時間的幾種方法,包括使用GetTickCount()、clock()、Boost庫的timer類以及高精度時控函數(shù)QueryPerformanceFrequency和QueryPerformanceCounter,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-09-09

最新評論