将十进制数转换成二进制数
在网上找的,整理了一下几种方法:
实现方法:
1、使用位操作运算(结合数组,可以实现双向)
2、使用数组实现
3、先转化为十六进制,再直接输出(用到递归)
4、通过递归调用实现
5、其它
1、使用位操作运算
//受限,必须知道int类型的变量在机器中的长度
#include
#include
#include
void main()
{
int x,i;
printf("please input x:\n");
scanf("%d",&x);
for(i=1;i<=16;i++)
{
//从高位开始
if((unsigned)(x&0x8000)!=0) //按照整型数是16位来计算的
printf("1");
else
printf("0");
x=x<<1; //左移
}
printf("\n");
// getch();
}
2、使用数组实现
//受限,必须知道int类型的变量在机器中的长度
#include
#include
#include
void convert(int s)
{
int d[16] = {0};
int i(15);
int m(1);
while (s != 0)
{
m = s % 2;
s /= 2;
d[i] = m;
i--;
}
cout << "转换后的二进制输出: ";
for (i = 0;i < 16;i++)
cout << d[i];
cout << endl;
}
void main()
{
int n;
cout << "请输入整数n:" ;
cin >> n;
n = abs(n);
if (n != 0)
{
if (n > 32767)
{
cout << "输入的数值太大!" << endl;
}
else
convert(n);
}
else
cout << "转换结果为 0 " << endl;
}
3、先转化为十六进制,再直接输出(用到递归)
//其实转化成八进制,也是一样的道理
//这里已经用到了递归
//很好,不用知道数据类型的长度
#include
#include
char *s[16] = {"0000","0001","0010","0011","0100","0101","0110","0111",
"1000","1001","1010","1011","1100","1101","1110","1111"};
void PrintNum(int a)
{
printf("%s",s[a]);
}
void convert(int s)
{
int m;
if (s < 16)
PrintNum(s);
else
{
m = s/16;
convert(m);
PrintNum(s%16);
}
}
void main()
{
int n;
printf("请输入一个十进制数n = ");
scanf("%d",&n);
printf("\n将这个十进制数转换成二进制数为:");
convert(n);
printf("\n");
}
4、通过递归调用实现
不用知道数据类型的长度
#include
#include
void convert(int s)
{
int m;
if (s < 2)
printf("%d",s);
else
{
m = s/2;
convert(m);
printf("%d",s%2);
}
}
void main()
{
int n;
printf("请输入一个十进制数n = ");
scanf("%d",&n);
printf("\n将这个十进制数转换成二进制数为:");
convert(n);
printf("\n");
}
5、比较精简的移位法
#include
#include
void main()
{
int a,i;
i = sizeof(int) * 8;
for(scanf("%d",&a);i > 0;i--,printf("%d",a >> i & 1));
//左移,为什么是32位?,第一次执行printf()是在i--之后,所以OK
system("pause");
}
阅读(8431) | 评论(1) | 转发(0) |