(int&) 与int(&)
2015-08-31 09:23
260 查看
#include<iostream> using namespace std; int main() { float a = 1.0f; cout << sizeof(int) <cout << sizeof(float) < cout << (int)a << endl;//1 cout << &a << endl; /*取a的地址十六进制0012FF7C*/ cout << (int)&a << endl;/*(int)&a:把a的地址强制转换成十进制的整型1065353216*/ cout << (int&)a << endl; /*实际上,(int&a)是与*((int*)&a)等价的,意思都是将&a这个地址上的32位看成int型,即使存储在这里的可能不是int型数据(int&)a为什么会是1065353216呢? 这和浮点数在内存中的存储格式有关,float 1.0在内存中存储为(按IEEE754规定): 符号位 阶(8位) 尾数(23位) 0 01111111 000 0000000000 0000000000 于是将其看做int型数值的话 00111111100000000000000000000000(2) = 1065353216(10) 把他按整型数解释为2^29+2^28+2^27+2^26+2^25+2^24+2^23=1065353216 (int&)a 相当于 *(int*)&a *(int*)(&a) *((int*)&a) */ cout << boolalpha << ((int)a == (int&)a ) << endl;// 输出false.因为1!=1065353216. float b = 0.0f; cout << (int)b << endl;//0 cout << &b << endl;/*取b的地址十六进制0012FF78*/ cout << (int&)b << endl;//0 cout << boolalpha << ((int)b == (int&)b ) << endl;// 输出true,因为0==0; /* (int&)a 不经过转换, 直接得到a在内存单元(就是地址)的值 (int)a a在内存中的值转换成int类型 */ }
相关文章推荐
- 【js】弹出文件选择框,可用与文件上传(适配所有浏览器)
- Python 列表学习与使用
- 使用 Sonar 进行代码质量管理
- 串口RTS, CTS的困惑
- ISO18000-6B和ISO18000-6C(EPC C1G2)标准的区别
- social emotion computing-感情的分类
- 属性
- 20140517随感
- C、C++基础知识一
- uval 6425 Intercity
- CentOS 7 上面的samba共享有问题
- Cheatsheet: 2015 08.01 ~ 08.31
- 使用操作系统命令来trace监听
- Leetcode # 169 Majority Element
- java中四种引用类型
- XML 元素 http://blog.csdn.net/chaiyu2002/article/details/5967186
- 互联网十三五规划出台在即 信息基础建设可望撬动投资两万亿
- hdu 5424 回溯+并查集判断连通性
- win7设置虚拟wifi
- 【mysql】Mysql数据库备份和按条件导出表数据