几行简单代码却看不懂了,请付出这个代码输出结果的原理
几行简单代码却看不懂了,请给出这个代码输出结果的原理
这个小程序是受到某本书的面试题启发后,自己想的小程序。
以上两个输出结果的原理是什么?
------解决方案--------------------
用不同类型的引用去访问一块内存。
你的例子中:
cout<<(float&)a<<endl;
将a这个变量所在的内存地址开始的连续4字节内存当成是一个float类型的变量
cout<<(double&)a<<endl;
将a这个变量所在内存地址开始的连续8字节内存当成是一个double类型的变量。
------解决方案--------------------
如果一个float变量对应的4个字节是CCCC0056,它肯定不是输出值,而是要按照float的格式来解释。float的格式有点复杂,某些位是尾数,某些位是指数,楼主有兴趣可以研究IEEE754
------解决方案--------------------
知识点: IEEE 754(浮点数的计算机表示)+ 大小端。
------解决方案--------------------
较短类型指针转较长类型指针,则会越界访问
引用和指针效果类似
这个小程序是受到某本书的面试题启发后,自己想的小程序。
#include <iostream>
using namespace std;
void main()
{
short a=0x56;
cout<<(float&)a<<endl;
cout<<(double&)a<<endl;
}
以上两个输出结果的原理是什么?
------解决方案--------------------
用不同类型的引用去访问一块内存。
你的例子中:
cout<<(float&)a<<endl;
将a这个变量所在的内存地址开始的连续4字节内存当成是一个float类型的变量
cout<<(double&)a<<endl;
将a这个变量所在内存地址开始的连续8字节内存当成是一个double类型的变量。
------解决方案--------------------
如果一个float变量对应的4个字节是CCCC0056,它肯定不是输出值,而是要按照float的格式来解释。float的格式有点复杂,某些位是尾数,某些位是指数,楼主有兴趣可以研究IEEE754
------解决方案--------------------
知识点: IEEE 754(浮点数的计算机表示)+ 大小端。
------解决方案--------------------
较短类型指针转较长类型指针,则会越界访问
引用和指针效果类似