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呢? 展开
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呢? 展开
2个回答
展开全部
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,这是规定.
看这三句,
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,这是规定.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询