Dream in valinor 2021-11-08 21:39 采纳率: 66.7%
浏览 193
已结题

读入一个十进制小数,输出其在计算机中的二进制存储形式(假设64位双精度浮点数)

感觉我写的程序比较混乱,正确的写法应该是什么啊
要求满足最大正实数,0,一般正负实数均成立,我的程序运行后最大正实数答案错误
读入一个十进制小数,输出其在计算机中的二进制存储形式(假设64位双精度浮点数)。

输入格式:
输入在一行中给出的一个十进制小数。

输出格式:
在一行中输出其在计算机中的二进制存储形式(假设64位双精度浮点数)。

输入样例1:
123.4567
输出样例1:
0100000001011110110111010011101010010010101000110000010101010011
输入样例2:
-0.12345
输出样例2:
1011111110111111100110100110101101010000101100001111001001111100
#include <stdio.h>

i#include <stdio.h>

int main()
{
    //起始数据准备
 
 
    double num;
    scanf("%lf", &num);
    double x;
    double sub;
    sub = num;
    if(num < 0){
        num = -num;
    }
     if(num!=0&&num!=179770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000){
    
     
    
    int w;
    w = (int)num;
    x = num -w;
    //对小数部分转换为二进制储存在数组中 
    int integer;
    int i = 1;
    int c[100];
    int pamount = 0;
    
    for(i=1;(int)x!=x && i<100;i++ ){
        x = x * 2;
        integer = (int)x;
        c[i] = integer; 
        x = x - integer;
        pamount++;    
        //printf("%d", c[i]);    
    }
    //printf("\n");
    //对整数部分 
    int left[100];
    int j=1;
    int sum = 0;
    int n=0;
    
    while(w!=0){
         left[j] = w%2;
         w= w/2;
         sum ++;    
         j++;    
         }
    int degree = sum + 1022;
     
     //阶数部分 
    int dleft[100];
    int r=1;
    int dsum = 0;
    int m=0;  
    while(degree!=0){
        dleft[r] = degree%2;
        degree = degree/2;
        dsum ++;    
        r++;    
        }
     
    //组合数据
    //符号位 
    
    int allthe[63];
    int p = 0;
    //找好每个类别的起始项 
    r=dsum;
    j=sum-1;
    i=1;
    //开始循环 
    for(p=0;p<=63;p++){
        if(p==0){
            if(sub >= 0){
                allthe[p] = 0;
            }
            if(sub < 0){
                allthe[p] = 1;
            }
        }
        //阶数
        else if(p>=1&&p<=11){
                if(m+dsum<11){
                   allthe[p] = 0;
                   m++;
                  } 
                else if(r>=1){
                                    
                   allthe[p] = dleft[r];
                   r--;
                  }
                  }            
        
        //尾数 
         else if(p>=12&&p<=sum+11-1&&j>=1){                  
                   allthe[p] = left[j];
                   j--;
                }
         else if(p>sum+11-1&&p<=63){
                  if(11+sum-1+pamount>=63&&i<=pamount&&11+sum-1+i<=63){
                 
                    allthe[p] = c[i];
                    i++;
                   }
                 else if(11+sum-1+pamount<63&&i<=pamount){
                   
                         allthe[p] = c[i];
                         i++;
                        }
                 else if(i+sum-1+11<63){
                         allthe[p] = 0;
                        }   
                }             
                }    
    //eventually
    
    for(p=0;p<=63;p++){
        printf("%d",  allthe[p]);
    }
    }
    else if(num==0){
        printf("0000000000000000000000000000000000000000000000000000000000000000");
    }
    else{
        printf("0111111111101111111111111111111111111111111111111111111111111111");
    }
    
    
    
    return 0;
}


  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-11-08 21:48
    关注

    将浮点型强制转换成char*,逐个char输出

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 11月17日
  • 已采纳回答 11月9日
  • 创建了问题 11月8日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来