C++如何将一个双精度的数转化成一个二进制数

yu_chao 2010-12-12 03:55:01
如题
...全文
248 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingbigeast 2010-12-15
  • 打赏
  • 举报
回复

//编程输出12345.67891023456的二进制形式
//运行结果:11000000111001.10101101110011010000111110100110010110101101101
//加小数点一共是62位。


#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
// ofstream fout("G:\\binary.txt");
int a=12345;
long double b=0.67891023456;
vector<char> r;
while(a)
{
if(a%2)r.push_back('1');
else r.push_back('0');
a/=2;
}//处理整数部分,每次除2,记录余数
reverse(r.begin(),r.end());//整数部分要反转
r.push_back('.');//小数点
int step=0,t;
while(b&&step<100)//step表示精确位数,防止无穷循环.最后小数位数小于100位,说明结果是准确的而不是近似的
{
b*=2;
t=(int)b;
r.push_back(t+'0');//取整数部分t
b-=t;
}//不用反转
vector<char>::iterator it;
for(it=r.begin();it!=r.end();++it)cout<<*it;
cout<<endl;
// fout<<r.size()<<endl;
return 0;
}

luciferisnotsatan 2010-12-15
  • 打赏
  • 举报
回复
先把double内存中的值读出来作为long long整数,然后用lltoa(val,puf,2)就行了,vc里是 i64toa
qq120848369 2010-12-12
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int main()
{
double transfer = 6.552251;

size_t size = sizeof(transfer);

unsigned char *pTransBegin = (unsigned char*) (&transfer);
unsigned char *pTransEnd = pTransBegin+size-1;

while( (pTransEnd - pTransBegin) >= 0)
{
cout<<hex<<(int)(*pTransEnd);

--pTransEnd;
}

return 0;
}
jackyjkchen 2010-12-12
  • 打赏
  • 举报
回复
呃,想起来格式化函数貌似不能直接格式化城01字符串,那就用如下函数吧,类型自己改

const Char *tonum = "01";
void ByteToBin(const Byte *pInput,Int32 iInlen,Byte *pOutput)
{
Int32 i = 0,j = 7;
while (i < iInlen)
{
for (j=7; j>=0; j--)
*pOutput++ = tonum[(pInput[i] >> j) & 0x01];
++i;
}
}
ww884203 2010-12-12
  • 打赏
  • 举报
回复
转换?怎么转?说一下要求啊
jackyjkchen 2010-12-12
  • 打赏
  • 举报
回复
你所说的二进制是什么概念?

你直接copy双精度变量的内存,里面就是二进制内容。

想转成01字符串的话,如下

double d;
char *p = (char*)&d;
再针对p做sprintf即可
C C++算法实例.c 一、论算法 1.求两的最大公约 2.求两的最小公倍 3.素的求法 二、图论算法 1.最小生成树 A.Prim算法: B.Kruskal算法:(贪心) 2.最短路径 A.标号法求解单源点最短路径: B.Floyed算法求解所有顶点对之间的最短路径: C. Dijkstra 算法: 3.计算图的传递闭包 4.无向图的连通分量 A.深度优先 B 宽度优先(种子染色法) 5.关键路径 6.拓扑排序 7.回路问题 9.判断图中是否有负权回路 Bellman-ford 算法 10.第n最短路径问题 三、背包问题 1.0-1背包: 每个背包只能使用一次或有限次(可转化为一次): 2.可重复背包 四、排序算法 A.快速排序: B.插入排序: C.选择排序: D.冒泡排序 E.堆排序: F. 归并排序 G.基排序 五、高精度计算 1.高精度加法 2.高精度减法 3.高精度乘以低精度 4.高精度乘以高精度 5.高精度除以低精度 6.高精度除以高精度 六、 树的遍历 1.已知前序中序求后序 2.已知中序后序求前序 3.已知前序后序求中序的一种 七 进制转换 1.任意正整进制间的互化 除n取余 2.实任意正整进制间的互化 乘n取整 3.负进制: 设计一个程序,读入一个十进制的基一个负进制的基,并将此十进制转换为此负 进制下的:-R∈{-2,-3,-4,....-20} 八 全排列与组合的生成 1.排列的生成:(1..n) 2.组合的生成(1..n中选取k个的所有方案) 九.查找算法 1.折半查找 2.树形查找 十、贪心 *会议问题 (1) n个活动每个活动有一个开始时间和一个结束时间,任一时刻仅一项活动进行,求满足活动最多的情况。 解:按每项活动的结束时间进行排序,排在前面的优先满足。 (2)会议室空闲时间最少。 (3)每个客户有一个愿付的租金,求最大利润。 (4)共R间会议室,第i个客户需使用i间会议室,费用相同,求最大利润。 十一、回溯法框架 1. n皇后问题 2.Hanoi Tower 汉诺塔 十二、DFS框架 NOIP2001 的划分 十三、BFS框架 IOI94 房间问题 十五、据结构相关算法 1.链表的定位函 2.单链表的插入操作 3.单链表的删除操作 4.双链表的插入操作(插入新结点q) 5.双链表的删除操作

64,681

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧