69,368
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
void Float(void *p)
{
long c;
int i,b[32];//存整数4个字节
c=*(long *)p;//p从空指针形式强制转换为long型 重要
for(i=0;i<32;i++)
{
b[i]=c&1;//通过空指针得到的一块数据,移位查看
c=c>>1;//右移
}
printf("y=");
for(i=31;i>=0;i--)
printf("%d",b[i]);
printf("\n");
}
int main()
{
float s;
scanf("%f",&s);
Float(&s);
}
#include <math.h>
#include <stdio.h>
#include <string.h>
void integerToBinary(char *output, int integer) //将整数integer转化为二进制并存放到output数组中
{
int buffer[100];
int i, j;
for (i = 0; integer > 0; i++)
{
buffer[i] = integer % 2;
integer /= 2;
}
for (i = i - 1, j = 0; i >= 0; i--, j++)
{
output[j] = buffer[i] + '0';
}
output[j] = '\0';
}
void decimalToBinary(char *output, float decimal) //将小数decimal转化为二进制并存放到output数组中,数组容量至少100
{
int i;
for (i = 0; i < 99; i++)
{
decimal *= 2;
if (decimal > 1)
{
output[i] = '1';
decimal -= 1;
}
else
output[i] = '0';
}
output[99] = '\0';
}
int getOrder(char *output) //算出阶数,output为存二进制整数的数组
{
int len = strlen(output);
return (len - 1 + 127);
}
void orderToBinary(char *output, int order) //将阶数order转化为二进制并存放到output数组中,数据大小最多8位
{
int i, n;
integerToBinary(output, order);
n = strlen(output);
if (n == 8)
return;
else if (n < 8)
{
n = 8 - n;
for (i = 7; i >= 0; i--)
{
if (i < n)
output[i] = '0';
else
output[i] = output[i - n];
}
output[8] = '\0';
return;
}
else
{
n -= 8;
for (i = 0; i < 8; i++)
{
output[i] = output[i + n];
}
output[8] = '\0';
return;
}
}
void getMantissa(char *outputMantissa, char *outputInteger, char *outputDecimal) //求尾数
{
int i, n;
strcpy(outputMantissa, outputInteger + 1);
strcat(outputMantissa, outputDecimal);
n = strlen(outputMantissa);
if (n > 23)
{
outputMantissa[23] = '\0';
return;
}
else if (n == 23)
return;
else
{
for (i = 23 - n; i < 23; i++)
outputMantissa[i] = '0';
outputMantissa[23] = '\0';
return;
}
}
void change(char *output) //将二进制数转化为十六进制数
{
int i, j;
int t;
for (i = 0; i < 8; i++)
{
t = 0;
for (j = 0; j < 4; j++)
{
t = t * 2 + output[i * 4 + j] - '0';
}
if (0 <= t && t <= 9)
output[i] = t + '0';
else
output[i] = t - 10 + 'a';
}
output[8] = '\0';
}
int main()
{
char finalFloat[100] = "";
char outputInteger[100];
char outputDecimal[100];
char outputOrder[100];
char outputMantissa[200];
float f;
int flag = 0; //0为正数,1为负数
scanf("%f", &f);
if (f < 0)
{
flag = 1;
f = -f;
}
integerToBinary(outputInteger, (int)floor(f));
decimalToBinary(outputDecimal, f - floor(f));
orderToBinary(outputOrder, getOrder(outputInteger));
getMantissa(outputMantissa, outputInteger, outputDecimal);
if (flag == 0)
finalFloat[0] = '0';
else
finalFloat[0] = '1';
strcat(finalFloat, outputOrder);
strcat(finalFloat, outputMantissa);
change(finalFloat);
puts(finalFloat);
return 0;
}
int main()
{
float f;
scanf("%f", &f);
return 0;
}