Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1183676
  • 博文数量: 232
  • 博客积分: 7563
  • 博客等级: 少将
  • 技术积分: 1930
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-21 11:17
文章分类

全部博文(232)

文章存档

2011年(17)

2010年(90)

2009年(66)

2008年(59)

分类:

2010-09-28 17:05:19

C++代码
  1. #include  
  2. using namespace std;  
  3. void main()  
  4. {  
  5. float a = 1.0f;  
  6. cout << &a << endl;  
  7. cout << (int)&a << endl;  
  8. cout << (int&)a << endl;  
  9. cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?  
  10. float b = 0.0f;  
  11. cout << (int)b << endl;  
  12. cout << (int&)b << endl;  
  13. 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。
阅读(823) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~