数制互相转换的源程序1

转载 2004年07月13日 14:46:00
从十进制数到二进制数的转换

作  者:winfox
发表于:2004-3-24

   从十进制数到二进制数的转换

// by Lynxcn version 1.0
// 转载请保留文章的完整性
// 本文只研究将无符号整数转换成二进制数

一、算法
1.除法
用十进制整数不断除以2,并记下余数,直到商为0,最后把余数反向读出即可。
如:将十进制数10转换成对应的二进制数
商 余数
10/2 5 0
5/2 2 1
2/2 1 0
1/2 0 1
反向读出即为:1010

2.位运算
由于数据在计算机中是以二进制形式存储的,所以我们只需将其各位输出(问题就在这里)即可。
按位与运算(&):参加运算的两个数据,按二进制位进行"与"运算。如果两个对应的二进制位都
为1,则结果为1,否则为0。
如:0&0=0, 0&1=0, 1&0=0, 1&1=1
十进制数3,13按位与如下:
0 0 0 0 0 0 1 1 (3)
& 0 0 0 0 1 1 0 1 (13)
------------------------------
0 0 0 0 0 0 0 1 (1)
掩码:掩码是将某些位设为开(1),而某些位设置为关(0)的位的组合。假设定义符号常量Mask为
1000,我们进行位与(&)运算: index=index&Mask; 此语句将index对应Mask为1的位设置为1,
其它位置0.因为:0&1=0,1&1=1,即为其本身;而无论0还是1与0按位与结果都为0,即被屏敝。

二、程序清单

**********************************************************
清单1:循环
**********************************************************
// cody by Lynxcn
// 十进制--->二进制
#include
#define M (sizeof(int)>2 ? 32 : 16)
int main(void)
{
int p, index=0, bin[M]={0};
int num;
cout<<"enter a num: ";
cin>>num;
if(num<0)
cout<<"Data Error"<else if(num==0)
cout<<0<else
{
do{ //算法
bin[index]=num%2;
num=num/2;
index++;
}while(num);
//滤掉前导无效0
index=M-1;
while(!bin[index])
{
index--;
}
p=index;
//输出
for(index=p;index>=0;index--)
cout<cout<}
return 0;
}

**********************************************************
清单2: 递归函数(但效率不是很高)
**********************************************************
// cody by Lynxcn
// 十进制--->二进制
#include
void dec_bin(int);
int main(void)
{
int num;
cout<<"enter a num: ";
cin>>num;
if(num<0)
cout<<"data error"<else
dec_bin(num);
cout<return 0;
}
void dec_bin(int n)
{
int mod;
mod=n%2;
if(n>=2)
dec_bin(n/2); //因为先求出的余数要最后输出,所以用递归
cout<return;
}

**********************************************************
清单3: 位运算
**********************************************************
// cody by Lynxcn
// 十进制--->二进制
#include
int main(void)
{
unsigned num, Mask;
Mask=sizeof(int)>2 ? 0x80000000 : 0x8000;
cout<<"Enter a number: ";
cin>>num;
if(num==0)
cout<<0<else
{
while(Mask)
{
if(num&Mask) //过滤前导无效0
{
while(Mask) //算法
{
cout<<(num&Mask ? 1 : 0);
Mask>>=1;
}
cout<break;
}
Mask>>=1;
}
}

return 0;
}

win2k server + vc6下调试通过;

三、其它
即然二进制会转换了,八进制、十六进制自然也不在话下。:)

End. 03-24-2004

 

【数据结构】用栈实现数制的转换

用栈实现数制的转换.cpp #include using namespace std; typedef int SElemType; typedef struct {  SElemType *b...
  • qq_32353771
  • qq_32353771
  • 2015年11月10日 15:02
  • 1789

CCF NOI1076 进制转换

问题链接:CCF NOI1076 进制转换。 时间限制: 1000 ms  空间限制: 262144 KB 题目描述    用递归算法将一个十进制数X(1...
  • tigerisland45
  • tigerisland45
  • 2017年05月01日 10:00
  • 558

POJ NOI0113-01 数制转换(Bailian2710)【进制】

问题链接:POJ NOI0113-01 数制转换。 总时间限制: 1000ms内存限制: 65536kB 描述 求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表...
  • tigerisland45
  • tigerisland45
  • 2017年04月09日 05:22
  • 507

采用顺序栈完成进制转换

采用顺序栈完成进制转换 (1)定义顺序栈的存储结构; (2)实现顺序栈的初始化、判断是否为空、进栈、出栈等基本操作; (3)调用顺序栈的基本操作实现进制转换。 代码: #includ...
  • migu77777
  • migu77777
  • 2016年10月17日 20:08
  • 1180

栈的应用之进制转换

利用栈的后进先出写一个10到8进制转换的小程序,代码如下:#include #include #define stack_size 100 #define stack_crement_size 10 ...
  • CCSUXWZ
  • CCSUXWZ
  • 2016年10月23日 21:37
  • 498

数据结构(17)栈典型问题之C++实现数值转换

导言 数值转换 算法 具体实现包括顺序栈完整定义 运行结果 结束语导言前面学习了顺序栈的一些基本定义和函数操作原型,本章是以数值转换为例子,给出顺序栈所有函数的实现。数值转换十进制N和其他dd进制的转...
  • YuYunTan
  • YuYunTan
  • 2016年03月18日 11:54
  • 1378

C语言再学习之进制转换总结

二进制数、八进制数、十六进制数与十进制数相互转换的方法:按权展开求和法 二进制与十进制间的相互转换: 二进制转十进制:按权展开求和 例如: 二进制101.01  转为十进制 1×2^2+0×...
  • qq_26816591
  • qq_26816591
  • 2016年01月20日 15:31
  • 808

《数据结构》算法3.8栈实现数制转换

首先最简单的是实现10进制和2进制的转换 /* 输入一个数,然后输出其对应的8进制的数 */ #include #define MAX 1000//顺序栈存储空间最大值 //int n,m;/...
  • sungaochao
  • sungaochao
  • 2016年05月15日 19:41
  • 647

数制转换 (九度oj题目44)

题目 题目描述: 求任意两个不同进制非负整数的转换(2进制~16进制),所给整数在long所能表达的范围之内。 不同进制的表示符号为(0,1,...,9,a,b,...,f)或者(0...
  • zinss26914
  • zinss26914
  • 2013年03月05日 11:24
  • 1943

关于C语言中进制问题以及简单的浅谈进制转化问题。

对于一般学习中,最常见的就是4种,二进制,八进制,十进制以及十六进制。在大一的C语言学习当中,学校粗略的说了一下这些,最后导致好多人无法流畅的进行进制之间的转化,以及使用。在大一接触单片机以后更加发进...
  • qq_26768741
  • qq_26768741
  • 2016年02月05日 10:52
  • 1647
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数制互相转换的源程序1
举报原因:
原因补充:

(最多只允许输入30个字)