小端模式与强制数据类型转换

C++数据类型转换的问题

[plain]

#include <iostream.h>   void main()   {       int i=0xb62;       char c;       c=i;       cout<<c<<endl;   }  

这里为什么输出的是b?

2.先检测一下我们所使用的电脑的CPU的字节序

版本一(有问题,结果无论如何都是34,不能说明34是高地址的还是低地址的)

小端模式与强制数据类型转换


版本二(根据 shineyan1991的留言修改后得到的,在此谢谢 shineyan1991的建议)

小端模式与强制数据类型转换



从上图可知,CPU的字节序是小端模式。

知识点
小端模式(Little-Endian) 
       数据类型中的高位数据存放于高地址部分,低位数据存放于低地址部分。简而言之:高位在后,低位在前。
大端模式(Big-Endian) 
       数据类型中的高位数据存放于低地址部分,低位数据存放于高地址部分。简而言之:高位在前,低位在后。


3.初步分析        0xb62是十六进制,因为char是一个字节的,所以我们只取低8位(丢弃了高字节,而保留了低字节),这是和语言有关,和CPU的架构无关,一个十六进制位转换为4个二进制位,所以,低8位就是62转换的,就是01100010,传递给char后,char的值就是98,根据ASCII,就会输出b。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyzxzs.html