i56544 2021-10-04 15:54 采纳率: 50%
浏览 247
已结题

用C实现:给出一个十进制数,可以是整数,也可以是小数。经过数据处理之后,输出这个数的原码,反码,补码,和移码的表示方法。其中整数部分和小数部分分别用32位机器数表示。再输出这个数的单精度浮点数。

给出一个十进制数,可以是整数,也可以是小数。经过数据处理之后,输出这个数的原码,反码,补码,和移码的表示方法。其中整数部分和小数部分分别用32位机器数表示。再输出这个数的单精度浮点数。

  • 写回答

1条回答 默认 最新

  • 关注

    如果有帮助请点一下我回答右上方的采纳,谢谢!以后有什么问题可以互相交流。

    img

    #include "stdio.h"
    #include <stdlib.h>
    #include <string.h>
    #define TTWO 32
    #define TONE 31
    //*x>-2147483648     && x<2147483648;
    void integertrueform(int x,int map[])
    {    if(x>=0) map[TONE]=0;
        if(x<0) {map[TONE]=1; x=-x;}
        int i=1; 
        while(x&&(i-TTWO))    
        {
            map[i-1]=x%2;
             i++;
             x=x/2;
         }
    }
    void decimaltrueform(double x,int map[])
    {    if(x>=0) map[TONE]=0;
        if(x<0) {map[TONE]=1; x=-x;}
        int i=TONE;
        while(x!=0&&i)
        {    x=x*2;
            if(x>=1) {map[i-1]=1;x--;}
            else map[i-1]=0;
            i--;
        }    
    }
    void ptrueform(int map[])
    {
        int i=TTWO;
        while(i)
         {
             printf("%d",map[i-1]); 
            i--;
         }
    }
    int onescomplement(int map[])
    {    int i;
        if(map[TONE]==0)
        { 
            return 0;    
        }
        else
        {    i=TONE;
    
            while(i>0)
            {
                if(map[i-1]==1)     map[i-1]=0;
                else     map[i-1]=1;
                i--;    
            }
            
        } 
    }
    void ponescomplement(int map[])
    {
        int i=TTWO;
        while(i>0)
        {
            printf("%d",map[i-1]); 
            i--;
        }
    }
    int complemental(int map[])
    {    if(map[TONE]==0) return 0;
        else
        {    int i=0;
            while(map[i]&&i<TTWO)
            {
                map[i++]=0;
            }
            map[i]=1;
        }
    }
    void pcomplemental(int map[])
    {
        int i=TTWO;
        while(i>0)
        {
            printf("%d",map[i-1]); 
            i--;
        }
    }
    int excess(int map[])
    {
        if(map[TONE]==1) map[31]=0;
        else map[TONE]=1;    
    }
    void pexcess(int map[])
    {
        int i=TTWO;
        while(i>0)
        {
            printf("%d",map[i-1]); 
            i--;
        }
    }
    /*void ITEID(int map[]) 
    {    int i=TTWO;int j[TTWO]={0};int e[8]={0};int c=22;
        while(i)
        {
            if(map[i--]==1) {break;i--;}    
        }
        integertrueform(i,e);
        j[23]=map[TONE];
        while(i&&c+1)
        {
            j[c--]=map[i--];
        }
        printf("ITEEE754浮点数:0");
        int y=31; 
        while(y>24)
        {
            printf("%d",e[y--]);
        }
        c=23; 
        while(c+1)
        {
            printf("%d",j[c--]);
        }
        printf("\n");
        
    } 
    /*void ITEI
    void ITED */
    main()
    {    int a[TTWO]={0},z[TTWO]={0};
        int ti = 0;
        double td = 0;
        double tdf=0;
        int tdi=0;
        char str[10]="";
        printf("请输入一个十进制数:");
        scanf("%s",str);    // 先存成字符串 
        if (NULL == strchr(str, '.'))   // 等于NULL是没有找到小数点 
        {
            sscanf(str, "%d", &ti);  // 再从字符串格式化成整型
            printf("输入的是定点整型:%d\n", ti); 
              integertrueform(ti,a);    
            printf("原码:");
            ptrueform(a);
        /*    ITEID(a);*/
            
            printf("\n");
            onescomplement(a);
            printf("反码:");
            ponescomplement(a);
            printf("\n");
            complemental(a);
            printf("补码:");
            pcomplemental(a);
            printf("\n");
            excess(a);
            printf("移码:");
            pexcess(a);
            printf("\n");
        }
        else
        {
            sscanf(str, "%lf", &td);  // 再从字符串格式化成浮点型 
            printf("输入的是浮点数:%lf\n", td); 
            if(td<1&&td>-1)
            { 
                  decimaltrueform(td,a);
                printf("定点小数原码:");
                ptrueform(a);
                printf("\n");
                onescomplement(a);
                printf("定点小数反码:");
                ponescomplement(a);
                printf("\n");
                complemental(a);
                printf("定点小数补码:");
                pcomplemental(a);
                printf("\n");
                excess(a);
                printf("定点小数移码:");
                pexcess(a);
                printf("\n");
            }
            if(td>=1||td<=-1)
            {
                tdi=(int)td;
                tdf=td-tdi;
                integertrueform(tdi,a);    
                decimaltrueform(tdf,z);
                
                printf("原码整数部分:");
                ptrueform(a);
                printf("        ");
                printf("原码小数部分:");
                ptrueform(z);
                printf("\n");
                
                onescomplement(a);
                printf("反码整数部分:");
                ponescomplement(a);
                printf("        ");
                onescomplement(z);
                printf("反码小数部分:");
                ponescomplement(z);
                printf("\n");
                
                complemental(a);
                printf("补码整数部分:");
                pcomplemental(a);
                printf("        ");
                complemental(z);
                printf("补码小数部分:");
                pcomplemental(z);
                printf("\n");
                
                excess(a);
                printf("移码整数部分:");
                pexcess(a);
                printf("        ");
                excess(z);
                printf("移码小数部分:");
                pexcess(z);
                printf("\n");
                
            } 
            
        }
    
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月4日
  • 已采纳回答 10月4日
  • 创建了问题 10月4日

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器