Chinaunix首页 | 论坛 | 博客
  • 博客访问: 351787
  • 博文数量: 82
  • 博客积分: 3353
  • 博客等级: 中校
  • 技术积分: 742
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-20 19:13
文章分类

全部博文(82)

文章存档

2015年(1)

2014年(1)

2013年(1)

2012年(12)

2011年(3)

2010年(25)

2009年(37)

2008年(2)

我的朋友

分类: C/C++

2009-12-12 21:59:15

将十进制数转换成二进制数
在网上找的,整理了一下几种方法:
实现方法:
  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");
}
 
 
 
 
阅读(8414) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

mynba1232010-07-24 21:57:45