• HDU 1298 Hat’s IEEE


    http://acm.hdu.edu.cn/showproblem.php?pid=1289

    对二进制数进行位运算。

    首先可以百度一下IEEE 754的规则。

    以6560.91为例:

    6560.91的二进制表示为1100110100000.111010001111010111,写成科学计数法就是1.100110100000111010001111010111 * 2^12

    s有一位,是符号位,为正数,符号位是0。e有八位,代表二进制数的指数,这时e就是12(sample输出的第一个数)。f代表有效部分,有23位,为100110100000111010001111010111 。

    所以,符号位是0
    然后用它的指数12加上127(注释中有解释)得到139 写成二进制是
    10001011
    再取23个有效位10011010000011101000111

    拼起来这三个数0-10001011-10011010000011101000111是01000101110011010000011101000111,十六进制就是0x45cd0747,这个数就是1.601785(sample输出的第二个数)

    View Code
    #include <stdio.h>
    int main ()
    {
        float f;
        int *pp=(int*)(&f);//把浮点型数f转化成2进制,取f地址存到整型指针里 
        int e;
        while(~scanf("%f",&f))
        {
            e=(*pp>>23)&0xff;//取中间八位指数 
            *pp&=0x807fffff;//把指数位全变为0 
            *pp|=0x3f800000;//把指数位变为01111111 
            printf("%d %f\n",e-127,f);//8位存指数,结果偏移127位,127表示指数为0 
        }
        return 0;
    }
  • 相关阅读:
    Linux按时间截取日志
    pip用法
    Java代码增删查改完整流程
    java类连接数据库
    js邮编、手机号、姓名限定
    jsp 名族添加
    app 评分的两种方法
    iOS 加载中文链接的图片
    WKWebView Cookie注入
    iOS MKMapView 优化内存占用
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/2461433.html
Copyright © 2020-2023  润新知