(int)a &a (int)&a (int&)a的区别

清疚 2022-06-18 12:27 428阅读 0赞
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <conio.h>
  5. using namespace std;
  6. int main()
  7. {
  8. float a = 1.0f;
  9. cout <<"(int)a " << (int)a << endl;//输出1
  10. cout <<"&a "<< &a << endl; //输出a的十六位地址,比如:0043FC78
  11. cout <<"(int)&a "<< (int)&a << endl; //把上面的十六位地址转化为10进制的整数(0043FC78)16 = (4455544)10,输出4455544
  12. cout <<"(int&)a "<< (int&)a << endl; /*输出结果是1065353216 1.0f 在内存中的存储为 0011 1111 1000 0000 0000 0000 0000 0000 亦即 0x3F800000 = (1065353216)10 float和int 这儿都是4字节,取float低32位转为成int;试想如果这里al类型为double,低32位都是0,输出结果就是0了*/
  13. float b = 0.0f;
  14. cout << (int)b << endl;//0
  15. cout << &b << endl;
  16. cout << (int&)b << endl;//0
  17. cout << boolalpha << ((int)b == (int&)b ) << endl;// 输出true,因为0==0;
  18. //(int&)a 不经过转换, 直接得到a在内存单元(就是地址)的值
  19. //(int)a a在内存中的值转换成int类型
  20. //float类型在内存中存储的形式是 ,符号位 指数 尾数
  21. //由754标准:阶码采用增码(该数补码的反符号),尾数采用原码
  22. //所以1.0f 在内存中的形式为
  23. //0011 1111 1000 0000 0000 0000 0000 0000
  24. //所以输出的是 0x3f800000
  25. return 0;
  26. }

当然上述结果也和编译器有关

发表评论

表情:
评论列表 (有 0 条评论,428人围观)

还没有评论,来说两句吧...

相关阅读