问题描述
0~1之间浮点实数的二进制表示1、给定一个介于0和1之间的实数,(如0.625),类型为double 打印它的二级制表示(0.101), 因为小数点后的二进制分别表示0.5,0.25,0.125......
2、如果该数字无法精确地用32位以内的二进制数表示,则打印"ERROR"
方法论
1、利用一个 字符数组 来存放该浮点实数的二进制数
2、用该浮点数乘以2,如果乘2之后大于1,则将1取出放出数组,并且-1 ;如果乘2之后小于,则将0放入数组;
3、一直重复步骤2,直至该浮点数等于0为止。
参考代码及详细说明
#include<stdio.h>
#include<string.h>
int main()
{
double num = 0.3;
char a[35] = {'0','.'}; // 存放二进制数数组
int i = 2;
while( num>0 ) {
double x = num*2; // 浮点数每次乘 2
if( x>=1 ) { // 如果乘以2的浮点数大于1
a[i] = '1'; // 则将1填入数组 (用于存放二进制数)
num = x-1; // 该数减1
} else {
a[i] = '0';
num = x; // 保留乘以2的浮点数
}
//无法精确地用32位以内的二进制数表示
if( i > 34 ){ // i从2开始,加上32位
printf("ERROR");
return 0;
}
i++;
}
printf("%s", a);
return 0;
}
标签:实数,二进制,32,浮点数,浮点,num,数组 来源: https://blog.csdn.net/qq_45034206/article/details/115025065
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。