C++ 浮点数

floata=1.0f;cout<<(int)a<<endl;cout<<(int&)a<<endl;cout<<boolalpha<<((int)a==(int&)a)... 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; // 输出什么?

输出是:
1
1065353216
false
0
0
true

如果是第一个输出:
float a表示成二进制是
0 01111111 000 0000 0000 0000 0000 0000
如果强制化为int型,为1
如果取地址表示int型,是1065353216没有问题

但第二个输出为什么全是0呢?
展开
 我来答
beddy1
2011-08-23 · TA获得超过1989个赞
知道大有可为答主
回答量:2271
采纳率:0%
帮助的人:2200万
展开全部
C++的强制类型转换其实是有4类的,并不推荐在C++中使用C风格的强制类型转换,因为,它太容易让人糊涂了。
看这三句,
float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl;
第二句的强制类型转换,用C++写应该是static_cast<int>(a),即将浮点数强制转换为整型,是对值的转换。
第三句,用C++写应该是reinterpret_cast<int&>(a),即对a表示的空间重新翻译,不把它当成是float,而直接当成是int来翻译。为什么加了一个引用&符号就会有这么大的差异呢?我们知道,引用是直接关联到被引用的空间的,不会新分配内存。所以……

至于后面的为什么全是零,这是IEEE关于浮点数的定义标准了,0.0f是一个特殊的数,阶码和尾数全为0来表示浮点的0,这是规定.
百度网友2512bd658
2011-08-23 · 超过12用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:37.7万
展开全部
因为转化int型, 会进行截断, 所以1.0变成了1. 而转化为(int&)时, 由于是转化为引用,而引用是用指针实现,内部还是同一块物理内存, 所以把1.0的二进制当int解析, 得到1065353216
但是0.0的二进制是一串0, 解析成int后还是0, 所以得到的是0, 只要被转化的浮点数不是0, 哪怕是0.00001, 转换成(int&)后得到的就不会是0
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式