博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浮点数的二进制
阅读量:6382 次
发布时间:2019-06-23

本文共 836 字,大约阅读时间需要 2 分钟。

今天在做一道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类型数据:

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

float类型和double类型的二进制存储:

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://jszha.baihongyu.com/

你可能感兴趣的文章
Java代码质量检测评估工具(用 Eclipse 插件篇)
查看>>
Windows7 下用Anaconda3安装TensorFlow教程
查看>>
pt-table-checksum数据一致性使用参考
查看>>
Linux性能分析之IO篇
查看>>
linux sort 命令详解
查看>>
Groovy语法糖一览
查看>>
kafka java编程
查看>>
druid单机部署
查看>>
git merge 和 git rebase 小结
查看>>
我的友情链接
查看>>
全选 jquery
查看>>
epoll
查看>>
sql 中if、case、while 语法格式
查看>>
引用变量
查看>>
cisco统一无线布署案例
查看>>
多线程中使用静态方法---转
查看>>
kernel panic not syncing oops
查看>>
比尔·盖茨名言集锦
查看>>
time33,bobhash,SpookyHash算法记录
查看>>
初学者如何学习java程序设计
查看>>