赞
踩
- #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 =
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。