①用逻辑与运算、逻辑左移
#include <stdio.h>
#include <stdlib.h>
#define M 1e-8
void main(void)
{
int i, j = 0, m = 0 ;
double n ;
printf("请输入一个十进制正实数:\n") ;
scanf("%lf", &n) ;
while (n > 1)
{
m++ ;
n -= 1 ;
}
for (i = 0 ; i < 32 ; i++)
{
if ((m & 0x80000000) == 0x80000000)
{
printf("1") ;
j = 1 ;
}
else
{
if (j == 1)
printf("0") ;
}
m = m << 1 ;
}
printf(".") ;
while (n > M)
{
n *= 2 ;
if (n >= 1)
{
printf("1") ;
n -= 1 ;
}
else
printf("0") ;
}
}
②用数组(用字符数组类似加个’0’就行了)
#include <stdio.h>
#include <stdlib.h>
#define N 33
#define M 1e-8
void main(void)
{
int a[N], i = 0, j, m = 0 ;
double n ;
printf("请输入一个十进制正实数:\n") ;
scanf("%lf", &n) ;
while (n > 1)
{
m++ ;
n -= 1 ;
}
while (m != 0)
{
a[i++] = m%2 ;
m /= 2 ;
}
for (int j = i-1 ; j >= 0 ; j--)
printf("%d", a[j]) ;
printf(".") ;
while (n > M)
{
n *= 2 ;
if (n >= 1)
{
printf("1") ;
n -= 1 ;
}
else
printf("0") ;
}
}