本文目錄一覽:
c語言bcd碼轉十進制
不知道我的理解對不對,這個問題,就是把一個整數還原成16進制數的表示方式,而這個十六進制數實際上表示的就是十進制數,所以我們只要把輸入的數轉換成十六進制表示就行了,但是有一個問題,其實需要注意的就是輸入的時候10-15
其實是不能輸入了,因為剛好就是A-F,所以不妨讓輸入值=16
=15
對於這個範圍的數
其實只要兩步就行了,第一,除以16取餘數,對應的是各位上的數,除以16取整數商,對應的就是十位數,應該這樣就可以
void
main(){
int
a;
cina;
if(a16||a153)cout”不符合輸入規則”endl;
else{
int
c=a%16;
int
b=a/16;
int
abc=
b*10+c;
coutabcendl;
}
}
如何用c語言實現bcd碼轉十六進制數比如BCD碼5(0101),怎麼轉成0x05??
#includestdio.h
#includestring.h
int main()
{
char a[20],b[5];
int i,result = 0,k = 1,j = 0;
printf(“輸入一個二進制數:\n”);
gets(a);
for(i = strlen(a)-1;i = 0;i –)
{
if(a[i] == ‘1’) result += 1 (k-1); //如果是1,用1*位權
if(k == 4 || i == 0) //每四位計算一次結果(result)。
//如果到了最高位(i==0)不足四位(比如100 0000),也計算
{
switch(result)
{
case 10: b[j++]=’A’;break; //大於等於十轉化成字母
case 11: b[j++]=’B’;break;
case 12: b[j++]=’C’;break;
case 13: b[j++]=’D’;break;
case 14: b[j++]=’E’;break;
case 15: b[j++]=’F’;break;
default: b[j++]=result + ‘0’;break;
}
result = 0; //結果清零
k = 0; //表示位權的K清零
}
k ++; // 初始位權為1
}
b[j] = ‘\0’;
printf(“結果是:\n”);
for(i = strlen(b)-1;i = 0;i –)
printf(“%c”,b[i]);
printf(“\n”);
return 0;
}
二進制數轉換為BCD碼的方法有哪些?
BCD碼使用4位二進制數來表示十進制中0~9這10個數的數碼。例如,十進制的237,其BCD碼就是 0010_0011_0111 ,但是其二進制是 1110_1101 。
我們先來研究兩個4位的BCD碼相加的情況。設這兩個BCD碼對應的十進制是a,b,其中a,b∈{0,1,2,…,9}。此時只有3種情況:
也就是說:
第一種情況顯然不需要再修正。
第二種情況,例如,5+8=13,我們希望得到BCD碼是 0001_0011 ,但是運算結果 1101 ,因此如果我們加上了6,就可以得到正確結果: 1101 + 0110 = 0001_0011 。這是因為,十進制是逢十進一,但是4位BCD加法,在看作是二進制數做加法時,是逢十六進一。因此,如果結果是10≤a+b≤15,加上6以後就是16+0≤a+b+6≤16+5,此時因為逢十六進一的原因,就得到了結果 1_0≤[a+b+6]≤1_5 ,這個結果就是對的。
第三種情況,因為16≤a+b≤18,逢十六進一後,我們得到了 1_0≤[a+b]≤1_2 ,為了使結果正確,如果我們加上一個修正值6,就得到 1_6≤[a+b+6]≤1_8 ,從而結果也變得正確。
綜上所述,如果兩個BCD碼相加:
考慮一個例子,比如 35+99=134。35和99的BCD碼分別是 0011_0101 和 1001_1001 。先計算低4位: 0101 + 1001 = 1110 ,因為這個值大於9,因此加上6作為修正: 1110 + 0110 = 1_0100 。現在計算高四位,同時注意到還有一個進位: 0011 + 1001 + 0001 = 1101 ,這個值還是大於9,加上6,得到 1101 + 0110 = 1_0011 。因此最終結果是 1_0011_0100 ,這剛好就是134的BCD碼。
我們之所以能夠安全地加上進位,是因為BCD加法比照的就是十進制的加法,只不過前者是4位為一個單位,而後者是以1位數字作為一個單位。加上修正值後,BCD加法的進位就相當於十進制加法的進位。圖示如下:
給定一個二進制數,要轉BCD碼。一個常用算法就是不斷將該數除以10,以此依次分解出個位、十位、百位……上的數字,這些數字的4位二進制數就是對應的BCD。但是這樣的算法需要不斷做除法操作十分的麻煩。我們可以使用名為 加三左移法 來完成。
這個算法基於以下的事實:
一個n位二進制數 ,其展開是 如果使用秦九韶算法的嵌套形式寫法,可以寫成: 或者若令 則 如果使用這種形式,我們先計算的是 ,然後是 ,然後是 ,……,最後是 。
注意到 就是把 左移1位,這樣就會在最右邊空出一個位,之後再加 就是用 填充這個最低位,從而我們得到了 。不斷左移,最終就能得到 ,現在我們來設計一個算法使得左移結束後能得到對應的BCD碼。
設 是一個無限長的、初始狀態為所有位都是0的理想寄存器, 是欲轉換的數。我們使用下面的 歸納法 來構造證明我們通過不斷左移最終能夠得到存儲在 中的 對應的BCD碼:
由數學歸納原理,移動 len(h) 次後,我們最終可以得到 的BCD碼。
作為一個例子,考慮使用該算法將 的二進制 1000_0110 轉為BCD碼:
現在, 已經全部移入,此時 的值就是 0001_0011_0100 ,它就是 的BCD碼。
C語言的算法如下:
c語言 計算機 bcd碼
(101001)BCD=29,
這是因為BCD編碼是每4位二進制對應一位十進制數字,即10–2,1001–9
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/245273.html