float

来源:互联网 发布:软件开发除web 编辑:程序博客网 时间:2024/05/21 09:56
#include <stdio.h>#include <stdlib.h>#include <math.h>int main(int argc,char *argv[]){    float f;    int i;    int sign;    int exp;    int mag;    float d_mag;    float f2;    sscanf(argv[1],"%f",&f);    //f=-0.12;    i = *(int*)&f;    sign = (i>>31)&0x01;    exp = (i>>23)&0xFF;    mag = i&0x7FFFFF;    d_mag = 1.0f*mag/0x800000;    f2 = (sign==0?1:-1)*(1+d_mag)*pow(2,exp-127);    printf("float:f=%f\n",f);    printf("sign=%X,exp=%X,mag=%X\n",sign,exp,mag);    printf("float:f2=%f\n",f2);    return 0;}


 float一共32位,其结构定义如下:

|-------- 31 -------|------------ 30-23 ------------ |------------ 22-0 ------------|

   符号位(sign)         指数部分(exp)                       小数部分(mag)

sign:符号位就一位,0表示正数,1表示负数

exp: 指数部分,无符号正数

mag:小数部分,定点小数,小数点在最左边。

float的表达式 :  pow(-1,sign)  *  (1+mag)  * pow(2,exp-127)

 

示例程序: