单精度浮点数的内存格式

IEEE的单精度浮点数标准

[高位] ------------------------> [低位]                      
[*][********][***********************]                   
                                                        
1符号位                                                    
       8位指数                                               
                 23位尾数(基数是【1.<尾数>)                        
 比如:                                                       
 Float Value:0.75                                          
 IEEE Memory:0-01111110-10000000000000000000000            
 符号位是:正数,                                                  
 指数部分是:01111110,即126,根据指数的规则-127~1280在中间.char不同。         
          也就是01111111代表数字0 01111110就是-1(126-127=-1)       
 基数就是1.100000000                                           
 二进制值就是:1.1 * 2^-1 = 0.11                                  
 十进制表示就是:2^-1 + 2^-2 = 0.5 + 0.25 = 0.75                   

代码如下:

#include 
int main()
{
    while (true) {

        std::cout << "Input float:" << std::endl;
        float v;
        std::cin >> v;

        std::cout << std::endl;
        std::cout << "----------------------------------------------" << std::endl;
        std::cout << "Float Value:" << v << "\n";
        std::cout << "IEEE Memory:";

        //  IEEE的单精度浮点数标准
        //  [高位] ------------------------> [低位]
        //  [*][********][***********************]
        //   
        // 1符号位   
        //       8位指数              
        //                 23位尾数(基数是【1.<尾数>)
        // 比如:
        // Float Value:0.75
        // IEEE Memory:0-01111110-10000000000000000000000
        // 符号位是:正数,
        // 指数部分是:01111110,即126,根据指数的规则-127~1280在中间.char不同。
        //          也就是01111111代表数字0 01111110就是-1(126-127=-1)
        // 基数就是1.100000000
        // 二进制值就是:1.1 * 2^-1 = 0.11
        // 十进制表示就是:2^-1 + 2^-2 = 0.5 + 0.25 = 0.75

        uint32_t mem = *((uint32_t*)&v);
        uint32_t mask = 0x80000000; // 最高位是1
        for(int i=0; i< 32; i++){
            std::cout << ( (mask & mem) > 0 ? "1" : "0" );
            if(i==0){
                std::cout << "-"; // 符号位与值分开
            }else if(i==8){
                std::cout << "-"; // 指数与尾数分开
            }
            mask = mask >> 1; // 逻辑右移一位
        }
        std::cout << std::endl;
        std::cout << "----------------------------------------------" << std::endl;
    }
    return 0;
}

你可能感兴趣的:(C++,C,Float,IEEE)