c语言十进制转ieee754代码,将十进制数转换为IEEE754格式

c语⾔⼗进制转ieee754代码,将⼗进制数转换为IEEE754格式#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];
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;
{
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
//printf("\n i = %d m= %d i - m = %d ",i,m,i - m-1); //去掉符号位jm = i-m-1;
}
else
{
while(s[m]!='1' && m
//printf("\n i = %d m= %d i - m = %d ",i,m,i - m); //去掉符号位jm = i-m;
}
int js = jm;
jm = jm + 127;
char cjm[16] = {0};
代码转换
char ws[65]={0};
XD2B(jm,cjm,true);    //××× 转换
printf("\n符号位: %c",s[0]);
printf("\n阶码: %s\n",&cjm[1]);
for(q= i -js,e=0; q
{
if(s[q] != '.')
ws[e++] = s[q];
}
printf("尾数: %s",ws);
}
void main()
{
printf("Code By YangLong  0.o\n ");
printf("IEEE754  ->:");
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
{
putchar(s[i]);
if(i == 0)
{
putchar(' '); //符号位
}
else if(i%4 ==0 )  //控制putchar(' ');
}
IEEE754(s);
printf("\n");
getchar();
getchar();
}

本文发布于:2024-09-22 10:04:38,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/377159.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:转换   浮点数   起来   字符串   数组   字符   说明   编写
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议