C语言十进制转二进制原理

下面代码的算法可以解释吗
unsigned char DecToBcd(unsigned char i)
{
static unsigned char a,b = 0;
b=i;
for(a=0;a<10;a++)
{
if(b>9)
{
b=b-10;
i=i+0x06;
}
else
{
return i;
}
}
}
c= i>>4;
d= i&0x0f;
这样cd组合起来就是i了,可以帮忙讲一下算法原理吗

十进制转二进制可以使用库函数itoa。

itoa函数原型:char*itoa(int value,char*string,int radix);

功能:将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。

nt value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等。


扩展资料:

方法

#include<stdio.h>

int main(void)

{ int i=0,n,a[32];

printf("请输入一个十进制整数.\n");

scanf("%d",&n);

while (n>0)

 {a[i]=n%2;

 i=i+1;

n=n/2;  }

printf("十进制整数转换为二进制数是:\n");

for(i--;i>=0;i--)

printf("%d",a[i]);

printf("\n");

return 0;}

十进制整数转换为二进制整数的方法:

十进制整数转换为二进制整数采用"除2取余,逆序排列"法。

具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-28

原理是小于10时不变,大于9时用-10作为个位(半个字节),而进位+6(即代码中的0x06),因为+1对于4位二进制码不一定产生进位。

c= i>>4;和d= i&0x0f;就是把一个字节的i拆成了c(高4位)和d(低4位)两个字节,便于按BCD码的单个字符操作。

这个函数只解决两位数的十进制数变换问题,把2位十进制数变成了一字节二位BCD码,如把19变成了00011001,对应的十进制是25。所以它并没有“将十进制数变换成一般意义上的二进制码”一般意义上19的二进制码是00010011,而非00011001。

扩展资料:

注意事项

十进制转二进制可以使用库函数itoa,itoa函数原型:char*itoa(int value,char*string,int radix);

例如:

#include<stdio.h>  

int main() 

{  

    int a,s[20],i=0,rem;  

    printf("请输入一个正整数:\n");   

    scanf("%d",&a);   

    while(a){   

        rem=a%2;   

        a=a/2;   

        s[i++]=rem;

    }  

    printf("二进制:");  

    while(i>0)   

        printf("%d",s[--i]);  

    printf("\n"); 

    return 0;

}本回答被网友采纳
第2个回答  2019-09-24

    这个函数只解决两位数的十进制数变换问题。

    这个函数把2位十进制数变成了一字节二位BCD码,如把19变成了00011001,对应的十进制是25。所以它并没有“将十进制数变换成一般意义上的二进制码”。一般意义上19的二进制码是00010011,而非00011001。

    原理是小于10时不变,大于9时用-10作为个位(半个字节),而进位+6(即代码中的0x06),因为+1对于4位二进制码不一定产生进位。

    c= i>>4;和d= i&0x0f;就是把一个字节的i拆成了c(高4位)和d(低4位)两个字节,便于按BCD码的单个字符操作。

    代码还有结构上的问题:return i;只在esle成立时执行,所以似乎有“没有完全”返回之嫌。

本回答被提问者采纳
第3个回答  2019-09-23
呵呵这样做的确输出的是反过来的数
方法一:
可以利用数组顺序存储转换过程中依次得到每个数字位,
转换结束后再按相反的次序输出数组内容即可得到正确的结果。

方法二:
直接搞掂,这才叫强!!!
且看我如何强法!!

#include <stdio.h>
void trans(int x)
{
int a[30];//我算过了,1亿好像才29位的二进制,一般不用算
//这么大的数了吧~~
int i=0,rem;
do{
rem=x%2;x=x/2;
a[i]=rem;
i++;
}while(x!=0);//这个算法看你的代码知道你懂!:)
while(i>0)
printf("%d",a[--i]);
printf("\n");//这就是我的精华了,倒输出正确顺序的数~
}
void main()
{
int d;
printf("请输入一个十进制的正整数:\n");
do scanf("%d",&d);while(d<0);
trans(d);
}

我觉得楼主的水平也不差,
应该看得懂吧
我只是加了几句而已
加分哦:)
第4个回答  2019-09-25
十进制转二进制可以使用库函数itoa。

itoa函数原型:char*itoa(int value,char*string,int radix);

功能:将任意类型的数字转换为字符串。在<stdlib.h>中与之有相反功能的函数是atoi。

nt value 被转换的整数,char *string 转换后储存的字符数组,int radix 转换进制数,如2,8,10,16 进制等。

参考代码:

#include <stdio.h>
#include<stdlib.h>
int main()
{
int i=10;
char a[100];
itoa(i,a,2);
printf("%s\n",a);
return 0;
}
/*
1010
*/

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网