本帖最后由 CationLiu 于 2019-3-11 22:25 编辑
方案一:
source:https://blog.csdn.net/weixin_41676881/article/details/80745177
输入:整数
输出:整数
这个方案的问题在于整数不能大于1023否则会溢出,不过优点是比较简单。
#include <stdio.h>
int main()
{
int x=1000;
printf("%d\n",transfer(x));
return 0;
}
int transfer(int x)
{
int p=1,y=0,yushu;
while(1)
{
yushu=x%2;
x/=2;
y+=yushu*p;
p*=10;
if(x<2)
{
y+=x*p;
break;
}
}
return y;
}
x=1023,输出:1111111111
x=23,输出:10111
方案二:
source:https://blog.csdn.net/wjkhello/article/details/78149441
输入:整数
输出:数组
这个方案的优点是可以做大数运算,不过输出是数组的形式,其次需要注意数组的长度。
#include <stdio.h>
int main()
{
int remainder[30];//定义了一个remainder数组,用来收集短除法除得的余数,栈倒序输出。
int i;
int x=1000;
int k=transfer(x,remainder);
for (i=k;i>=1;i--){
printf("%d",remainder);
}
return 0;
}
int transfer(int x, int remainder[])
{
int b,k;
k=0;
while(x!=0){
b=x/2;
k++;
remainder[k]=x-b*2;
x=x/2;
}
return k;
}
x=1000,输出:1111101000
x=10000,输出:10011100010000
方案三:
source:https://www.cnblogs.com/didiaoxiaoguai/p/6731310.html
输入:整数
输出:数组(固定位数,不足部分以0填补)
此方案与方案二差不多,不过可以指定输出的位数,将不足的位用0补满。
#include <stdio.h>
#define N 32 //固定位数
int main()
{
int remainder[N] = {0};//将数组初始化为0(位数不满时,将输出0填补)
int i;
int x=1000;
transfer(x,remainder);
for (i = 0; i <= N - 1; i++)
{
printf("%d",remainder);
}
return 0;
}
int transfer(int x, int remainder[N])
{
int i;
for (i = N-1; i >=0; i--) //对数组从后往前赋值
{
remainder = x % 2;
x = x / 2;
} return 0;
}
x=1000,输出:00000000000000000000001111101000
x=10000,输出:00000000000000000010011100010000
C语言在线测试:
https://c.runoob.com/compile/11
int x=1000;
unsigned int flag = (0x1 << 31);
int t = 0;
for (int i=0; i< 32; i++)
{
t = ((x & flag) == 0 ) ? 0 : 1;
printf("%d", t);
//printf("%01d", t); // 32bit mode
flag = flag >> 1;
}