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

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

问题描述:

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

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

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");
            
        } 
        
    }

}