输出内存中的存储二进制
输入一个实数(正数负数还有整数浮点型数),输出对应的double型内存中的存储二进制表示,同时输出对应的float型在内存中的存储二进制表示。求指点,我是一名学生,急着教作用
/* 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; }
p = (unsigned char*)&value; for (index = 0; index < sizeof(value); ++index) { printf_s("%02X ", *p++); }
#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退出):"); } }