几行简单代码却看不懂了,请付出这个代码输出结果的原理

几行简单代码却看不懂了,请给出这个代码输出结果的原理
这个小程序是受到某本书的面试题启发后,自己想的小程序。

#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类型的变量。
------解决方案--------------------
引用:
Quote: 引用:

用不同类型的引用去访问一块内存。
你的例子中:
  cout<<(float&)a<<endl;
将a这个变量所在的内存地址开始的连续4字节内存当成是一个float类型的变量
cout<<(double&)a<<endl;
将a这个变量所在内存地址开始的连续8字节内存当成是一个double类型的变量。

"将a这个变量所在的内存地址开始的连续4字节内存当成是一个float类型的变量" 查看地址可知:您所说的这个float类型变量的地址存放的值为CCCC0056  这个您确定就是输出值吗?

如果一个float变量对应的4个字节是CCCC0056,它肯定不是输出值,而是要按照float的格式来解释。float的格式有点复杂,某些位是尾数,某些位是指数,楼主有兴趣可以研究IEEE754
------解决方案--------------------
知识点: IEEE 754(浮点数的计算机表示)+ 大小端。 
------解决方案--------------------
较短类型指针转较长类型指针,则会越界访问
引用和指针效果类似