输出浮点数的阶码,位码
#include<stdio.h>
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;
}