zoukankan      html  css  js  c++  java
  • int(a) 和 (int &) a 及 数据存储地址的探究

    做题做到一个很有意思的题

       void main()
    {
        float a = 1;
        cout << boolalpha << ((int)a == (int &)a);
        float b = 0;
        cout << boolalpha << ((int)b == (int &)b);
    }

    答案如下

    falsetrue

    对于a的false层面,理解起来不难,int a 是获取a的值,(int &) a获取的是a的地址,并将获取的地址强制转换为int

    (int&)a:将a的引用强制转换为整型,意思是a所在的内存,本来定义的时候为float类型并初始为1.0f,但现在我要按int类型解释这段内存(也就是说a所在的内存地址中的数据本来是按float型存储表示的,你非要按int型来解释不可)。
    1.0f   在内存中的存储为
    0   011   1111   1   000   0000   0000   0000   0000   0000.
    把他按整型数解释为2^29+2^28+2^27+2^26+2^25+2^24+2^23=1065353216 

    但有意思的第二个答案,居然是true

    原来所谓的存储就是地址,是按照IEEE 754标准,进行分配的,并非随机

  • 相关阅读:
    [HAOI2006] 数字序列
    [HAOI2012] 外星人
    [HAOI2012] 高速公路
    [HAOI2007] 覆盖问题
    [HAOI2007] 分割矩阵
    [HAOI2007] 上升序列
    牛客练习赛58 D 迷宫
    牛客练习赛58 F XOR TREE
    牛客练习赛58 E 最大GCD
    牛客练习赛58 C 矩阵消除游戏
  • 原文地址:https://www.cnblogs.com/jeasion/p/10758360.html
Copyright © 2011-2022 走看看