binyang_zhao282 2022-11-09 15:00 采纳率: 0%
浏览 16

输出浮点数的阶码,位码

输出浮点数的阶码,位码

#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;

}

  • 写回答

2条回答 默认 最新

  • 浪客 2022-11-09 16:47
    关注
    #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");
    }
    
    
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 11月9日

悬赏问题

  • ¥15 做一个简单项目,用Python分析共享单车的数据
  • ¥20 在使用CESM2.2.0模型进行case.submit过程中出现如下错误(关键词-Map)
  • ¥15 有办法改变通过wifi进入的网站的设置吗
  • ¥15 所以到底怎么算!算到凌晨五点都算不出来!
  • ¥15 label_studio
  • ¥15 请教如何phython发邮件
  • ¥15 linux系统安装问题
  • ¥15 路径规划如何采用矢量法让他们尽量在一个方向
  • ¥15 crypto 一道rsa解密题
  • ¥15 survIDINRI已将生存时间转为数值变量,仍错误 Time variable is not numeric。