将十进制数转换为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];
    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<strlen(s)) 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<strlen(s)) 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<strlen(s);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<strlen(s);i++)
    {
        putchar(s[i]);
        if(i == 0) 
        {
                putchar(‘ ‘); //符号位
        }
        else if(i%4 ==0 )  //控制
            putchar(‘ ‘);
    }
     IEEE754(s);
    printf("\n");
    getchar();
    getchar();

}

时间: 2024-08-22 19:09:08

将十进制数转换为IEEE754格式的相关文章

C++实现将十进制数转换为小于等于九的任意进制

//十进制转换为小于等于九的任意进制数 #include<iostream> #include<string> #include<stack> using namespace std; stack<int> num; void change(int N,int M) { if(N<0||M<=1) { cout<<"error!"<<endl; return; } while(N>0) { num

将十进制数转换为十六进制数

package welcome; import java.util.Scanner; public class Decimal2HexCoversion { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("Enter an decimal number: "); int decimal = in.nextInt(); // 调用十进制数转十六进

将十进制数转换为二进制数----不用数组,也不用函数,只用循环

输入一个正整数(十进制),输出此整数对应的二进制数(用循环实现,但不用数组,也不用函数调用) /* 输入一个正整数(十进制),输出此整数对应的二进制数(用循环实现,但不用数组) 分析:十进制转换成二进制的方式: 用辗转相除依次取余,直到商为0,获取逆序的余数序列就是对应的二进制数 用循环不用数组,因此,将按先得到的余数序列组成一个整数值, 再逆序输出该整数值(从低位到高位输出),即获得二进制代码 */ #include <iostream> using namespace std; int m

js中十进制数转换为16进制

使用 Number类的 toString()方法: var num = 255; console.log(num.toString(16));//输出FF

每天一个小程序——十进制数转换为二进制数!

#include<stdio.h> void chang2(int);#define MAX 100int main(){ int input; printf("please input a int_number:\n"); scanf("%d",&input); printf("the number's binary is:");  chang2(input); return 0; } void chang2(int x){

数组-----二进制数与十进制数互换

//二进制数转换为十进制数 #include"stdafx.h" #include<iostream> //#include<string.h> //#include<process.h> using namespace std; void main(){ int i, bitv, w=1, value = 0;//value累加和.bitv位值(0或1).w权值 char a[20]; cout << "Enter a bit

算法笔记_161:算法提高 十进制数转八进制数(Java)

目录 1 问题描述 2 解决方案   1 问题描述 编写函数,其功能为把一个十进制数转换为其对应的八进制数.程序读入一个十进制数,调用该函数实现数制转换后,输出对应的八进制数. 样例输入 9274 样例输出 22072 样例输入 18 样例输出 22 2 解决方案 具体代码如下: import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] ar

算法提高 十进制数转八进制数

时间限制:1.0s   内存限制:512.0MB 编写函数,其功能为把一个十进制数转换为其对应的八进制数.程序读入一个十进制数,调用该函数实现数制转换后,输出对应的八进制数. 样例输入 9274 样例输出 22072 样例输入 18 样例输出 22 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6

ACM将一个十进制的数转换为一个十六进制的数输出

Description 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示. Input 每行一个整数x,0<= x <= 2^31. Output 每行输出对应的八位十六进制整数,包括前导0. Sample Input 0 1023 Sample Output 0x00000000 0x000003FF   解题思路:我们把一个十进制的数转换为一个八位十六进制数只需在输出用%.8X就可以了.然后我们在每一次输出一个八位十六进制数之前都输出一个0x字符串就可以了. 程序