实型数在内存里存储的2进制码

 
/*
时间:2011年10月9日17:04:25
功能:输入一个float型数,输出其在内存中存储的2进制码
备注:输入0时的输出状态不对
*/
# include <stdio.h>

int main()
{
     float x;
     int i;
     int e;
     int a[ 32];
    
    
    printf( " 输入浮点数:\n ");
    scanf( " %f ",&x);
    
     if (x>= 0.0)         // 符号位表示浮点数的正负
    {
        a[ 0]= 0;
    }
     else
    {
        a[ 0]= 1;
        x = -x;
    }
    
     if (x<= 1.0)
    {    
         for(e= 0; e>- 128; --e)         // 规定尾数必须是一个大于1小于2的小数(比如1.25)
        {
             if(x>= 1.0 && x< 2.0)
            {
                 break;
            }
            x *= 2.0;
        }
    }
     else
    {
         for(e= 0; e< 128; ++e)
        {
            
             if(x>= 1.0 && x< 2.0)
            {
                 break;
            }
            x /= 2.0;
        }
    }
    
    x -= 1.0;         // 这样的话系统默认有一个1,因此只需要存储后面的0.25(1就不需要存储了),0.25用二进制表示是0.01,再去掉(0.)就成为01。
    
     for (i= 9; i< 32; ++i)
    {
        x *= 2.0;
         if(x>= 1.0)
        {
            a[i]= 1;
            x -= 1.0;
        }
         else
        {
            a[i]= 0;
        }
    }
    
     if(e> 0)             // 如果指数为0,则用01111 1111表示(即10进制的127,在此基础上加或减),比如1用1000 0000表示,-1用0111 1110表示。依此类推。
    {
        e = e- 1;
        a[ 1]= 1;
    }
     else
    {
        e = e+ 127;
        a[ 1]= 0;
    }
    
     for (i= 8; i> 1; --i)
    {
        a[i] = e% 2;
        e = e/ 2;
    }
    
    printf( " SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM\n ");         // S表示符号位,X表示阶数,M表示尾数
     for (i= 0; i< 32; ++i)
    {
        printf( " %d ",a[i]);
         if ( 3==i% 4)
        {
            printf( " ");
        }
    }
    printf( " \n ");
     return 0;
}
/*
在VC++6.0中的输出结果为:
————————————
输入浮点数:
2.0
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0100 0000 0000 0000 0000 0000 0000 0000
Press any key to continue

输入浮点数:
-2.0
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
1100 0000 0000 0000 0000 0000 0000 0000
Press any key to continue

输入浮点数:
1
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0011 1111 1000 0000 0000 0000 0000 0000
Press any key to continue

输入浮点数:
0.75
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0011 1111 0100 0000 0000 0000 0000 0000
Press any key to continue

输入浮点数:
2.5
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0100 0000 0010 0000 0000 0000 0000 0000
Press any key to continue

输入浮点数:
0.1
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0011 1101 1100 1100 1100 1100 1100 1101
Press any key to continue

输入浮点数:
0
SXXX XXXX XMMM MMMM MMMM MMMM MMMM MMMM
0000 0000 -1000 0000 0000 0000 0000 0000
Press any key to continue
————————————
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值