c语言,将十进制转化为二进制

2025-02-24 00:04:37
推荐回答(5个)
回答1:

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

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

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

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

参考代码:

#include 
#include
int main()

int i=10;
char a[100];
itoa(i,a,2);
printf("%s\n",a);
return 0; 
}
/*
1010
*/

回答2:

换一种思路,会更简单些,给点时间,我写一个给你。
#include

void dectobin(int n, char *po)
{
char chtmp[33]; //32 整数,使用33字节存储
int i, cnt = 0;
while (n != 0)
{
chtmp[cnt] = n % 2 + '0';
n /= 2;
cnt++; //累计位数
}
//以上字符方向是反的,现调整过来
for (i = 0; i < cnt; i++)
po[i] = chtmp[cnt - 1 - i];
po[i] = 0; //字符串结尾的 0
}
void dectobin2(int n, char *po)
{
int i, j;
unsigned int k = 0x80000000; //构造一个第 31 位是 1,其他位全为 0 的数
for (i = 0; i < 32; i++)
{
j = n & k; //取出 n 的第 31 - i 位数
if (j == 0)
po[i] = 0;
else
po[i] = 1;
k >>= 1;
}
//如果有必要,除去二进制数前面的 0
/*
for (j = 0; j < 32; j++)
{
if (po[j] == 1) break;
}
for (i = j; i < 32; i++)
{
po[i - j] = po[i];
}
po[i - j] = 0; //字符串结尾的 0
*/
}

int main()
{
int i, n = 159753; //为方便测试
//scanf("%d", &n);
char ch[33];
dectobin(n, ch);
printf("%s\n", ch);
dectobin2(n, ch);
for (i = 0; i < 32; i++)
{
printf("%d", ch[i]);
}
printf("\n");
system("pause");
return 0;
}

回答3:

感觉你这个好像不对,而且pow函数的返回值是double类型的,所以if(n/pow(2,i)==1)这个条件永远满足不了,用int存储最后的结果也不好,因为结果很容易溢出,pow的结果也容易溢出,下面是我写的一个,参考下吧,希望对你有帮助

int dectobin(int n,char* des){
int i=0;
int num,tmpn = n;
num=0;
do
{
for (int j = i; j > 0; j--)
{
des[j] = des[j-1];
}
des[0] = tmpn%2+'0';
i++;
tmpn /= 2;
} while (tmpn);

return num;
}

int _tmain(int argc, _TCHAR* argv[])
{
int i,n;
char tmp[1024] = {0};
printf("请输入十进制数:");
scanf("%d",&n);

i=dectobin(n,tmp);
printf("%s\n",tmp);

return 0;
}

回答4:

int dectobin(int n){
int i;
int num;
num=0;
if(n>1023||n<1) return 0;//safe done
for(i=10;i>=0;i--){ //10 is max limit
if(n/(int)pow(2,i)==1){
num=num+(int)pow(10,i);
n=n-(int)pow(2,i);
if(n==0)
break;
}
}
return num;
}

你这个程序逻辑,最多只能支持到1023,因为你用int表达二进制,最多只能表示10个1。

回答5:

C语言_010_二进制转十进制_上