从十进制数到二进制数的转换
作 者: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
|