输出内存中的存储二进制
输入一个实数(正数负数还有整数浮点型数),输出对应的double型内存中的存储二进制表示,同时输出对应的float型在内存中的存储二进制表示。求指点,我是一名学生,急着教作用
2015-04-26 15:35
2015-04-26 21:38
2015-04-27 21:30
2015-04-27 21:31
2015-04-27 21:40
2015-04-27 21:45
程序代码:
/*
http://bbs.bccn.net/thread-444513-1-1.html
输入一个实数(正数负数还有整数浮点型数),输出对应的double型内存中的存储二进制表示,同时输出对应的float型在内存中的存储二进制表示。
*/
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
double value;
unsigned char* p = NULL;
int index;
do
{
printf_s("Input a double value: ");
fflush(stdin);
} while (scanf_s("%lf", &value) != 1);
printf_s("The value is %f\n", value);
printf_s("Memory image: ");
p = (unsigned char*)&value;
for (index = 0; index < sizeof(value); ++index)
{
printf_s("%02X ", *p++);
}
putchar('\n');
printf_s("\nPress any key to continue...");
fflush(stdin);
getchar();
return EXIT_SUCCESS;
}

2015-04-28 19:08
程序代码:
p = (unsigned char*)&value;
for (index = 0; index < sizeof(value); ++index)
{
printf_s("%02X ", *p++);
}

2015-04-28 19:20
程序代码:#include <stdio.h>
void setbin(char *buf,unsigned char *p,int l)
{//把p指向的长度为l的数据转换为二进制显示效果放到buf数组中
int i,j,k,n,a;
buf[0]=0;
for(i=0,k=0;i<l;i++)
{
a=p[i];
for(j=0;j<8;j++,k++)
{
if((l==4&&(k==23||k==31))||(l==8&&(k==52||k==63)))
{//处理浮点数符号位、指数、尾数
for(n=0;buf[n];n++);
for(;n>=0;n--)buf[n+1]=buf[n]; //buf数组数据右移一位
buf[0]='-';
}
for(n=0;buf[n];n++);
for(;n>=0;n--)buf[n+1]=buf[n]; //buf数组数据右移一位
buf[0]='0';
if(a%2)buf[0]='1';
a/=2;
}
}
}
void main()
{
float a;
double b;
unsigned char *p;
char c[255];
printf("输入实数(q/Q退出):");
while(scanf("%lf",&b))
{
a=(float)b;
printf("显示数据:%f 显示格式:符号位-指数-尾数\n",b);
p=(unsigned char*)&a;
setbin(c,p,sizeof(a));
printf("单精度:%s\n",c);
p=(unsigned char*)&b;
setbin(c,p,sizeof(b));
printf("双精度:%s\n",c);
printf("\n输入实数(q/Q退出):");
}
}
2015-04-29 06:06
2015-04-29 06:18