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


1.先从一个问题说开去

相关阅读: C++数据类型转换的问题

[plain]
  1. #include <iostream.h>  
  2. void main()  
  3. {  
  4.     int i=0xb62;  
  5.     char c;  
  6.     c=i;  
  7.     cout<<c<<endl;  
  8. }  

这里为什么输出的是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。
  • 1
  • 2
  • 下一页

相关内容