#define GET(p) (*(p) | (*(p+1) << 8) | (*(p+2) << 16) | (*(p+3) << 24)) void printb(unsigned int n) ... { unsigned char B[32] = ...{0,}; bool flag = false; int j = 0; for (int i=31;i>=0;i--) ...{ unsigned int p; p = n << 31 - i >> 31; if (!flag) ...{ if (p == 1) ...{ flag = true; } } if (flag) ...{ B[j] = (p == 1)?'1':'0'; j ++; } } printf("%s",B);} int main( int argc, char * argv[]) ... { float f = -289.95; //单精度浮点 unsigned int sign;//符号 unsigned int significand;//有效位 unsigned int exponent;//指数 unsigned int floatbyte; unsigned char * pfloat = (unsigned char*)&f; floatbyte = GET(pfloat); sign = floatbyte >> 31; exponent = floatbyte << 1 >> 24; significand = floatbyte << 9 >> 9; printf("符号位:"); printb(sign); printf(" 指数位:"); printb(exponent); printf(" 有效位:"); printb(significand); //输出结果 printf(" 单进度浮点数为:"); if (sign == 1) ...{ printf("-"); } else...{ printf("+"); } printf("1."); printb(significand); //这里只讨论指数为规范化值的情况,对于零和无穷大不讨论 if (int(exponent - 127) > 0) ...{ printf(" >> %d ",exponent - 127); } else ...{ printf(" << %d ",127 - exponent); } return 0;} 以上代码只为了演示单精度浮点数在内存中的存储方式,双精度也类似。想了解更多,请参照IEEE Standard 754 Floating-Point标准。