#include "stdio.h"#include "stdlib.h"#include "string.h"#define datatype int#define MAX_SIZE 50#define OK 1#define Err 0 /*** Code : By YangLong 2014年9月21日,** 0x00: 函数说明 * XD2B 将任意一个 浮点数 转换为 2 进制* XD2B(double f,char* s, bool z)* 参数一: 需要转换的浮点数* 参数二: 存放结果的字符数组* 参数三: z = true 时 代表 整数转换* z = false 时 表示浮点数 转换** 0x01 IEEE754(char* s)* 参数一: 将 XD2B中的字符数组 转换为 IEEE754格式* 0x02 不足:* 结果显示为 拆分项* 要链接起来 用 字符串 拼接 就行** 0x03 待优化: * 结果显示为 16进制* 将IEEE754转换为真值** 不是程序复杂,而是编写的有点乱。*/typedef struct Stack{ datatype data[MAX_SIZE]; int top;}stk;void Init(stk* s){ s->top = -1;}bool push(stk *s,datatype d){ if(s->top+1>MAX_SIZE-1) { printf(" 'push' Error: Overflow!\n"); exit(0); } s->data[++s->top] = d; return OK;}datatype pop(stk* s){ if(s->top<0) { printf(" 'pop' Error: Overflow!"); exit(0); } datatype data = s->data[s->top--]; return data;}bool IsEmpty(stk* s){ return s->top == -1 ? OK : Err;}void XD2B(double f,char* s, bool z){ int i=0,j=0; stk ss; Init(&ss); if(f<0) { s[0] = '1'; j = 1; f = f*(-1.0); } else { s[0] = '0'; j = 1; } int q = (int)f; while(q) { push(&ss,q%2); q = q/2; } while(!IsEmpty(&ss)) { s[j++] = pop(&ss) + '0'; } if(z) // z×××运算 return; s[j++] = '.'; f = f - (int)f; while(i<23) { f = f*2; s[j+i] = (int)f + '0'; f = f - (int)f; i++; }}void IEEE754(char* s) { int j=1,i = 0,q,e,jm=0; while(s[++i]!='.'); int m=1; if(i>1) { while(s[m]!='1' && m:"); char s[80]={0}; double df=0.0; scanf("%lf",&df); XD2B(df,s,false); printf("%.16lf 二进制小数: ",df); bool flag =true; int j = 0; for(int i=0;i