Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3749998
  • 博文数量: 356
  • 博客积分: 10458
  • 博客等级: 上将
  • 技术积分: 4734
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-24 14:59
文章分类

全部博文(356)

文章存档

2020年(17)

2019年(9)

2018年(26)

2017年(5)

2016年(11)

2015年(20)

2014年(2)

2013年(17)

2012年(15)

2011年(4)

2010年(7)

2009年(14)

2008年(209)

分类: C/C++

2008-05-30 20:02:08

float a = 1.0f;
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; // 输出什么?

输出啥?
不明白 (int &)a是啥意识?为啥两个比较的出结果不同。
 
-----------------------------------------------------
 
cout < < boolalpha < < ( (int)a == (int&)a ) < < endl;
// 输出 false, 因为 float 的 1 和 int 的 1 在内存里的表示不一样。
...
cout < < boolalpha < < ( (int)b == (int&)b ) < < endl; // 输出 true
// 输出 true, 因为 float 的 0 和 int 的 0 在内存里的表示是一样的。
(int &)a 就表示 不管 a 是什么,我都当他是一个int变量。
从机器码的角度来说,变量a会被翻译成一个内存地址,(int &)a 就是说,这个内存地址里的内容它是一个整数。

(int)a 呢不同:如果 a 不是整数,就会按规则转换成整数,存入另一个地址(或临时变量)中去。

浮点数的 1.0f 在内存里是这样表示的:
0011 1111 1000 0000 00000000 00000000
这个32位二进制数被当作整数输出就是:
1065353216
而整数的 1 在内存里是这样表示的:
0000 0000 0000 0000 00000000 00000001

所以 (int)a != (int&)a

浮点的0和整数的0 在内存里都是:
0000 0000 0000 0000 00000000 00000000

所以 (int)b == (int&)b
阅读(1893) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~