结果int main() { char p[4]={1,2,3,4}; cout<<*((short*)p)<<endl; cout<<*((short*)p+1)<<endl; return 0; }
程序运行的结果为上述的原因是:
计算机有字节顺序之分,这与机器有关,分为低端字节计算机和高端字节计算机, 所以在不同的计算机里,存储形式可能不一样。 在低端字节计算机中,short 型 字节的顺序是由小到大的,即低位字节在前,高位字节在后; 高端字节计算机short 型字节的顺序是由大到小的,即高位字节在前,低位字节在后。采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。到目前为止,采用大端或者小端进行数据存放,其孰优孰劣也没有定论。有的处理器系统采用了小端方式进行数据存放,如Intel的奔腾。有的处理器系统采用了大端方式进行数据存放,如IBM半导体和Freescale的PowerPC处理器。不仅对于处理器,一些外设的设计中也存在着使用大端或者小端进行数据存放的选择。
unsigned short 值 25的二进制是 : 0000 0000 0001 1001,
在低端字节计算机中,按照低位字节在前,高位字节在后,就是: 1001 1000 0000 0000, 在高端字节计算机中,按照高位字节在前,低位字节在后,就是:0000 0000 0001 1001,
unsigned int 值25的二进制是:0000 0000 0000 0000 0000 0000 0001 1001,在低端字节计算机中,按照低位字节在前,高位字节在后,就是: 1001 1000 0000 0000 0000 0000 0000 0000, 在高端字节计算机中,按照高位字节在前,低位字节在后,就是:我们目前常用的 PC 几乎都是 低端字节计算机。0000 0000 0000 0000 0000 0000 0001 1001,
上题中,指针p指向空间存放数据为1000 0000,0100 0000,1100 0000,0010 0000.
p经过(short*)p转换后,*(p)返回前两个空间的存放的数据为1000 0000,0100 0000,因为低字节在前,高字节在后,所以最后的值为;同理, *(p+1)返回后两个空间的存放的数据,1027=