c语言,将十进制转化为二进制
答案:4 悬赏:0 手机版
解决时间 2021-03-19 23:19
- 提问者网友:
- 2021-03-19 07:43
c语言,将十进制转化为二进制
最佳答案
- 五星知识达人网友:笑迎怀羞
- 2021-03-19 07:52
十进制转二进制可以使用库函数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
",a);
return 0;
}
itoa函数原型:char*itoa(int value,char*string,int radix);
功能:将任意类型的数字转换为字符串。在
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
",a);
return 0;
}
全部回答
- 1楼网友:七十二街
- 2021-03-19 11:40
感觉你这个好像不对,而且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;
}
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;
}
- 2楼网友:由着我着迷
- 2021-03-19 10:48
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;
}
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。
- 3楼网友:持酒劝斜阳
- 2021-03-19 09:25
换一种思路,会更简单些,给点时间,我写一个给你。
#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
}
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;
}追问好的我等着追答OK。两种方法,各有优劣,视情况使用。
#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
}
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;
}追问好的我等着追答OK。两种方法,各有优劣,视情况使用。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯