十进制与二进制相互转换(c++)

一、二进制数转换成十进制数

由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。

例如把二进制数 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;
}

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值