输出浮点数的阶码,位码
#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");
}