一、二进制数转换成十进制数
由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。
例如把二进制数 110.11 转换成十进制数。
二、十进制数转换为二进制数
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
1. 十进制整数转换为二进制整数
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
例如把 (173)10 转换为二进制数。
解:
2.十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数 部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
例如把(0.8125)转换为二进制小数。
解:
例:
(173.8125)10=( )2
解:
在上个例子中得(173)10=(10101101)2 得(0.8125)10=(0.1101)2
把整数部分和小数部分合并得:
(173.8125)10=(10101101.1101)2
#include<iostream>
#include<cmath>
#include<string>
using namespace std;
int a[1000],b[1000];
/**
* 十进制转二进制
**/
void dec2bin(double x){
int num1=(int)x;
double num2=x-num1;
int iter=0;
//整数
while(num1>0){
a[iter++]=num1%2;
num1/=2;
}
for(int i=iter-1,z=4-iter%4+1;i>=0;i--,z++)
{
cout<<a[i];
if(z%4==0)cout<<" ";
}
cout<<". ";
//小数
iter=0;
while(fabs(num2-0.0)>0.000001){//double类型,num2==0.0
b[iter]=(int)(num2*2);
num2=num2*2-b[iter];
iter++;
}
for(int i=0;i<iter;i++)
{
cout<<b[i];
if((i+1)%4==0)cout<<" ";
}
cout<<endl;
}
/**
* 二进制转十进制
* .....
**/
void bin2dec(string s){
int dot_pos=0;//小数点位置
for(int i=0;i<s.size();i++){
//除去空格
//....
if(s[i]=='.'){dot_pos=i;break;}
}
//....
}
int main()
{
double x;
x=256.3125;
dec2bin(x);
return 0;
}