- #include
- using namespace std;
- void main()
- {
- float a = 1.0f;
- cout << &a << endl;
- cout << (int)&a << endl;
- cout << (int&)a << endl;
- cout << boolalpha << ( (int)a == (int&)a ) << endl;
- float b = 0.0f;
- cout << (int)b << endl;
- cout << (int&)b << endl;
- cout << boolalpha << ( (int)b == (int&)b ) << endl;
- }
输出结果是
1 // a转换为整形
1310588 // a的地址转换为整形
1065353216 // a转化为整形引用
false
0 // b转换为整形
1310584 // b的地址转换为整形
0 // b转化为整形引用
true
(int)&a 把a的地址强制转换成整型,(int&)a 把a强制转换成整形引用类型,相当于是某个整形引用,引向了a所在的32位内存区域,并将这32位当做一个整数。
对于浮点数1.0,根据IEEE754的浮点数存储格式表示为3f800000(0011 1111 1000 0000 0000 0000
0000 0000),(int)&a把3f800000当做int型输出,所以结果为1065353216。0 在内存中的的存储形式
0000 0000 0000 0000 0000 0000 0000 0000,当做int型输出后,结果依然为0。
阅读(481) | 评论(0) | 转发(0) |