浮点数的二进制

简介:

今天在做一道HDOJ1012的题目时,数据的输出格式要求小数点后有效数字9位但是小数末尾没用的0不可以输出,以前做过一道类似的题目,先乘10^9,然后不停%10,/10或者%10,100,1000以此类推。我想看一看能否从二进制中找到部分规律,最开始想用double 变量e一直&1,然后移位输出,编译的时候发现小数不能进行&运算,然后就上网搜索了一下二进制输出浮点数的文章,下面几篇感觉不错:

(1)这篇文章是使用一个union类型结构(包含一个float型变量以及一个32位被分为三段(1bit,8bit,23bit)unsigned的struct),union结构是里边的元素共用存储区,浮点数无法进行&操作,但是unsigned可以进行,想法太巧妙了~

按二进制输出float类型数据:http://book.51cto.com/art/201011/235192.htm

(2)这篇文章直接使用强制转化,把浮点数变为整型,其中还介绍了二进制转换为浮点数的相关内容;

float类型和double类型的二进制存储:http://blog.csdn.net/gjw198276/article/details/6956244

复制代码
 1 //str should have at least 64 byte.
 2 void doubletostr(double* a, char* str)
 3 {
 4     int i;
 5     __int64 c;
 6     c= ((__int64*)a)[0];
 7     for(i=0;i<64;i++){
 8         str[63-i]=(char)(c&1)+'0';
 9         c>>=1;
10     }
11     str[64] = '\0';
12     printf("%.9lf %s\n",*a,str);
13 }
复制代码

(3)这篇文章使用reinterpret_cast<unsigned __int64*>(&db);将double变量db转换为unsigned 64位的int型指针,变为unsigned之后就可以使用&运算了;

c/c++ double如何转化为二进制数:http://pingxiyan.blog.163.com/blog/static/53195773201172042444836/

 


本文转自ZH奶酪博客园博客,原文链接:http://www.cnblogs.com/CheeseZH/archive/2013/03/12/2955102.html,如需转载请自行联系原作者

相关文章
|
6月前
二进制和进制转换
二进制和进制转换
79 0
|
9天前
八进制转换为二进制
【10月更文挑战第27天】八进制转换为二进制。
33 8
|
9天前
十进制转换为二进制
【10月更文挑战第27天】十进制转换为二进制。
15 7
|
2月前
二进制转十进制
二进制转十进制
79 13
【进制转换】— 包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细
【进制转换】— 包含整数和小数部分转换(二进制、八进制、十进制、十六进制)手写版,超详细
二进制浮点数的加减法运算
二进制浮点数的加减法运算
进制转换(二进制、八进制、十进制、十六进制)涵盖整数与小数部分,超级详细!
进制转换(二进制、八进制、十进制、十六进制)涵盖整数与小数部分,超级详细!
1337 0
进制转换(二进制、八进制、十进制、十六进制)涵盖整数与小数部分,超级详细!