浮点数的内存存储方式

#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标准。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值