Chinaunix首页 | 论坛 | 博客
  • 博客访问: 721696
  • 博文数量: 105
  • 博客积分: 3532
  • 博客等级: 中校
  • 技术积分: 1328
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-20 18:57
文章分类

全部博文(105)

文章存档

2015年(1)

2014年(1)

2013年(7)

2012年(14)

2011年(21)

2010年(61)

分类: C/C++

2011-06-30 14:53:23

  1. #include <iostream>
  2. #include <string>
  3. #include <cstdlib>
  4. using namespace std;
  5. int main()
  6. {
  7.     float a = 1.0f;
  8.     cout << (int)a << endl;
  9.     cout << (int&)a << endl;
  10.     cout << boolalpha << ( (int)a == (int&)a ) << endl; // 输出什么?
  11.     float b = 0.0f;
  12.     cout << (int)b << endl;
  13.     cout << (int&)b << endl;
  14.     cout << boolalpha << ( (int)b == (int&)b ) << endl; // 输出什么?
  15. }

(int&)a == static_cast (a)
(int)&a == reinterpret_cast (&a);

(int&)a 不经过转换, 直接得到a在内存单元的值,并将其转换成整数输出。
(int)a a在内存中的值转换成int类型

float类型在内存中存储的形式是 ,符号位 指数 尾数
由754标准:阶码采用增码(该数补码的反符号),尾数采用原码
所以1.0f 在内存中的形式为
0011 1111 1000 0000 0000 0000 0000 0000
所以输出的是 0x3f800000

0 在内存中的的存储形式
0000 0000 0000 0000 0000 0000 0000 0000

所以输出的是0x00000000

所以前面一个是false,后面一个是true。
阅读(1129) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~