C语言:八进制转二进制(可负数可小数)

c语言八进制转二进制,可输入负数可含小数。如果错误望指正。

#include<stdio.h>
#include<math.h>
void f(int m,int bit,int a[6][3]){  //将一位八进制数转化为三位二进制数
		for(int i=2;i>=0;i--){
			a[bit][i]=m%2;
			m=m/2;
		}
}
void main(){
	double x;
	int bit=0,m,a[6][3]={0},b[6][3]={0};  //m存放八进制数整数部分,bit记录第几位数,a数组存放整数,b数组存放小数
	printf("请输入一位八进制数(-377777.777777-377777.777777):\n");
	scanf("%lf",&x);
	if(x<0){		//如果输入的数是负数则二进制最高位为1
		a[5][0]=1;
		x=-x;
	}
	m=x;
	x=x-m;   //x存放八进制数的小数部分
	while(m){   //八进制整数部分转化为二进制存入数组a
		f(m%10,bit,a);
		bit++;
		m=m/10;
	}
	bit=0;
	while(bit<6){   //八进制小数部分转化为二进制存入数组b
		m=x*10;
		f(m,bit,b);
		bit++;
		x=x*10-m;
		x=x+9*pow(10,-6);
	}
	for(int i=5;i>=0;i--)   //输出二进制整数部分
		for(int j=0;j<3;j++)
			printf("%d",a[i][j]);
	printf(".");
	for(int i=0;i<6;i++)   //输出二进制小数部分
		for(int j=0;j<3;j++)
			printf("%d",b[i][j]);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值