直接上代码,相对比较的看,没有简化,里面有很多问题没解决,请大家帮忙解决一下!
#include<stdio.h>
//打印补码
void print_buma(unsigned int *a,unsigned int flag)
{
if(flag&1)
printf("单精度浮点数:");
printf("0x%08X\n", *a);
for(int i=0;i<32;i++)
{
if(*a<<i&1<<31)
printf("1");
else
printf("0");
}
printf("\n");
for(int i=0;i<32;i++)
{
if(i==0) //第31位,也就是最高位 1位
printf("符号位:");
if(i==1&&flag&2)
printf("\n数值域:");
if(i==1&&flag&1) //23-30 8位
printf("\n指数域:");
if(i==9&&flag&1) //0-22 23位
printf("\n尾 数:");
if(*a&1<<(31-i)) //与最高一位比较
printf("1");
else
printf("0");
}
printf("\n");
}
void print_buma_d(unsigned long *a)
{
//unsigned long b=1<<63; // 单写一个“1<<63”打印出来是0, 1<<32直接打印也是0,但1<<31就可以打印出数;所以我才使用unsigned long来存储
printf("双精度浮点数:");
printf("%ld\n",*a);
// printf("%ld\n",b); //为0 ??
for(int i=63;i>=0;i--)
{
if(*a>>i&1) //把要比较的最高位移动到最低位
printf("1");
else
printf("0");
}
printf("\n");
for(int i=63;i>=0;i--)
{
if(i==63) //63位 符号位
printf("符号位:");
if(i==62) //52-62 11位
printf("\n指数域:");
if(i==51) //0-51 52位
printf("\n尾 数:");
if(*a>>i&1) //把要比较的最高位移动到最低位
printf("1");
else
printf("0");
}
printf("\n");
}
void main_copy()
{
int a=12,a0=-24;
float b=123.4,b0=-123.4;
double c=35.25,c0=-225.25;
unsigned int *p1=&a; //可以“不需要强制转换”
unsigned int *p2=&a0;
unsigned int *p3=&b;
unsigned int *p4=&b0;
unsigned long *p5=&c;
unsigned long *p6=&c0;
printf("%d\n",a);
print_buma(p1,2);
printf("\n");
printf("%d\n",a0);
print_buma(p2,2);
printf("\n");
printf("%f\n",b);
print_buma(p3,1);
printf("\n");
printf("%f\n",b0);
print_buma(p4,1);
printf("\n");
printf("%f\n",c);
print_buma_d(p5);
printf("\n");
printf("%f\n",c0);
print_buma_d(p6);
}
void main()
{
int a=12,a0=-24;
float b=123.4,b0=-123.4;
double c=35.25,c0=-225.25;
unsigned int *p1=(unsigned int *)&a;
unsigned int *p2=(unsigned int *)&a0;
unsigned int *p3=(unsigned int *)&b;
unsigned int *p4=(unsigned int *)&b0;
unsigned long *p5=(unsigned long *)&c;
unsigned long *p6=(unsigned long *)&c0;
printf("%d\n",a);
print_buma(p1,2);
printf("\n");
printf("%d\n",a0);
print_buma(p2,2);
printf("\n");
printf("%f\n",b);
print_buma(p3,1);
printf("\n");
printf("%f\n",b0);
print_buma(p4,1);
printf("\n");
printf("%f\n",c);
print_buma_d(p5);
printf("\n");
printf("%f\n",c0);
print_buma_d(p6);
printf("\n\ncopy:\n");
main_copy();
}
运行结果:两个函数一样,所以截取了copy的部分。