注册 登录
编程论坛 C语言论坛

十进制转二进制

qiqicai 发布于 2021-04-10 22:47, 1994 次点击
#include <stdio.h>
int main()
{
int n,m;
printf("输入十进制数:");
scanf("%d",&n);
printf("输入转换的进制数:");
scanf("%d",&m);
int s,ys,er,i;
if(m==2){
while(n!=0)
{
n=n/2;                          请大家帮我看看我这个为什么不对呢
ys=n%2;
er=+ys*i;
i=i*10;                                                              
}
printf("%d进制数为:%lld",m,er);
return 0;
}

}





                                                                                                               
                                                                                                               
                                                                                                               
                                                                                                               

5 回复
#2
apull2021-04-11 00:05
int s,ys,i=1;
unsigned long long er=0;
if(m==2){
    while(n!=0)
    {
        ys=n%2;
        n=n/2;
        er+=ys*i;
        i=i*10;                                                              
    }
    printf("\n%d进制数为:%llu",m,er);
    return 0;
}


用ull存储结果最大输入值是1023,可以改用数组保存二进制每一位
#3
qiqicai2021-04-11 10:58
回复 2楼 apull
首先感谢你的知导    但是我想问一下%llu是用来输出二进制的吗  就像%d用来输出十进制但我在网上查说没有输出二进制的写法   那这个是什么呢
#4
夏天q2021-04-11 11:35
回复 3楼 qiqicai
%llu 是用来输出 unsigned long long 类型的值
使用unsigned long long 是因为它的取值范围很大
#5
qiqicai2021-04-12 20:55
回复 4楼 夏天q
#include <stdio.h>
int main()
{
int n,m;
printf("输入十进制数:");
scanf("%d",&n);
printf("输入转换的进制数:");
scanf("%d",&m);
int s,ys,er,i;
if(m==2){
while(n!=0)
{
n=n/2;                          那我这个不对是因为%lld的取值范围不够大吗   还是因为哪个unsigned呢
ys=n%2;
er=+ys*i;
i=i*10;                                                              
}
printf("%d进制数为:%lld",m,er);
return 0;
}

}
#6
夏天q2021-04-12 22:15
回复 5楼 qiqicai
虽然说你的输出格式是%lld(long long int)
int s,ys,er,i;
但这里定义的er是为int类型
unsigned long long是指无符号的long long int类型 因为转换的二进制数为正数 相对有符号的long long int取值范围更大
1