输出浮点数的阶码,位码

输出浮点数的阶码,位码

#include

float GetSign(float x);
float GetRank(float x);
float GetTail(float x);
void turn(int x,int number);
int main()
{
float x;
scanf("%f",&x);
int a,b,c;
a=GetSign(x);
printf("符号=%d",a);
b=GetRank(x);
c=GetTail(x);
printf("符号 = %d\n ",a);
printf("阶码 = ");
turn(x,8);
printf("\n");
printf("尾数 = ");
turn(x,23);

}

float GetSign(float x)
{
int n=*(int *)&x;
int mask = 1<<31;
return mask&n;
}

float GetRank(float x)
{
int n=*(int *)&x;
n=(n>>23)&0xFF;
n-=127;
return *(float *)&n;
}

float Gettail(float x)
{
int n=(int)&x;
int e=n&(0xFF<<23);
n&=~(0x1FF<<23);
if (e)
{
n|=(0x7F<<23);

}
return *(float *)&n;

}

void turn(int x,int number)
{
int a[number]={};
int num=x;
int i=0,temp;

do
{
    temp=num%2;
    num=num/2;
    a[i]=temp;
    i++;
}while(num!=0);

int j;
   for(j=i;j>=0;j--)
{
    printf("%d",a[j]);
    
}

return;

}

#include <stdio.h>
union data
{
    float fdata;
    unsigned idata;
};

void turn(unsigned x, char *a, int len);
void print(char *num, int a, int b);

int main()
{
    union data d;
    int len = sizeof(unsigned) * 8;
    scanf("%f", &d.fdata);
    char *istr = (char *)calloc(len, 1);
    turn(d.idata, istr, len);
    printf("符号 = ");
    print(istr, 0, 1);
    printf("阶码 = ");
    print(istr, 1, 9);
    printf("尾数 = ");
    print(istr, 9, len);
}

void turn(unsigned num, char *a, int len)
{
    int i = 0, temp;
    while (num != 0)
    {
        temp = num % 2;
        num = num / 2;
        a[len - i - 1] = temp;
        i++;
    };

    return;
}

void print(char *num, int a, int b)
{
    for (int j = a; j < b; j++)
    {
        printf("%d", num[j]);
    }
    printf("\n");
}