最近在学习浮点数的表示规则,然后想要验证非规格化数,规格化数,正负无穷大等,然后写了如下代码:
1.规格化数的验证
#include<stdio.h>
#include <stdlib.h>
int main()
{
float f=1.5;
printf("%x",(int *)&f);
return 0;
}
2.非规格化数的验证
#include<stdio.h>
#include <stdlib.h>
typedef struct _float
{
int w:23;
int j:8;
int s:1;
}Float;
int main()
{
float f=0;
Float obj;
obj.s=0;
obj.j=0;
obj.w=0x40000000;
f=*(float *)(&obj);
printf("%f\n",f);
return 0;
}
3.无穷大验证
#include<stdio.h>
#include <stdlib.h>
typedef struct _float
{
int w:23;
int j:8;
int s:1;
}Float;
int main()
{
float f=0;
Float obj;
obj.s=0;
obj.j=0xff;
obj.w=0x0;
f=*(float *)(&obj);
printf("%f\n",f);
return 0;
}
4.非数验证
#include<stdio.h>
#include <stdlib.h>
typedef struct _float
{
int w:23;
int j:8;
int s:1;
}Float;
int main()
{
float f=0;
Float obj;
obj.s=0;
obj.j=0xff;
obj.w=0x1;
f=*(float *)(&obj);
printf("%f\n",f);
return 0;
}
主要是构建一个结构体,按照float尾数,阶码的位数来构造一个结构体
当然,想验证任意十进制数的二进制表达方式可以用如下代码:
#include <stdio.h>
int main(void)
{
float fnum = 1;
int i;
int *p = (int *)&fnum;
while (fnum != 0)
{
printf("input a num: ");
scanf("%f",&fnum);
for (i = 31;i >= 0;i--)
{
printf("%d",(*p&(1<<i)?1:0));
if(i == 23)printf(" ");
if(i == 31)printf(" ");
}
printf("\n");
}
return 0;
}
功能就是输入一个十进制数然后输出二进制数