返回信息流程序代码如下:
float a1=1.0f;
float b1=0.0f;
cout<<boolalpha<<"boolalpha:"<<((int)a1==(int&)a1)<<endl;
cout<<boolalpha<<"boolalpha:"<<((int)b1==(int&)b1)<<endl;
为什么以上程序结果是:
boolalpha:false
boolalpha:true
这是一条镜像帖。来源:北邮人论坛 / cpp / #37877同步于 2010/4/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
面试遇到未见过的题,求指教
mysterious03
2010/4/13镜像同步15 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 mysterious03 的大作中提到: 】
: 程序代码如下:
: float a1=1.0f;
: float b1=0.0f;
: ...................
请看 浮点编码 相关知识
大牛,我不会,请讲一下嘛~
【 在 jmpesp (Edsger Wybe Dijkstra) 的大作中提到: 】
: 请看 浮点编码 相关知识
你是在说cool厕所吧……
【 在 jmpesp (Edsger Wybe Dijkstra) 的大作中提到: 】
: 我也不会 正愁着你没来跟我们大家开讲 现在你来了 赶紧讲下
【 在 mysterious03 的大作中提到: 】
: 程序代码如下:
: float a1=1.0f;
: float b1=0.0f;
: ...................
言归正传
这个主要设计两点:
(1)浮点编码
(2)类型转换
浮点编码中,1.0f的编码跟整数1的编码是不一样的,具体可以网上查。
本题最主要的考点是类型转换,用(int&)转换的话,会直接把浮点编码转为相应的数值,所以1.0f被转换过来将会变成很大的数。但用(int)转换的话,则是安全的,也就是直接转换为浮点中的整数部分,即1.0f会被转换为1
也就是说因为(int)0和(float)0编码一样,编译器Y的优化的时候检测出来了,删了点东
西,造成了这个结果?
【 在 jmpesp (Edsger Wybe Dijkstra) 的大作中提到: 】
: 言归正传
: 这个主要设计两点:
: (1)浮点编码
: ...................
【 在 FadeToBlack 的大作中提到: 】
: 也就是说因为(int)0和(float)0编码一样,编译器Y的优化的时候检测出来了,删了点东
: 西,造成了这个结果?
恩 因为两者编码相同才造成true