e不会的大端小端存储模式

如何判断自己电脑数据存放模式呢,首先数据存放模式有两种,一种叫做大端模式,一种叫小端模式;什么是大端模式,小端模式呢,LOOK!! -->>  

    

    大端模式:低地址处,存放高位;高地址处,存放低位;

    小端模式:低地址处,存放低位;高地址处,存放高位;


        也就是说,只要可以检测出,一个数据的低地址处,存放的是数据低位,还是高位就可以了,下来是一个简单测试程序:

【代码实现】

    【方法1

#include <stdio.h>
int check_bit(int *p)
{
     char *p_bit=(char *)p;//强制类型转换让*p_bit只能访问p一个字节
     if (*p_bit == 1)
     {
          return 1;//低位存放在低地址
     }
     else
     {
          return 0;//低位存放在高地址
     }
     
}
int main()
{
     int a=1;
     int *p=&a;
     int ret=check_bit(p);
     
     if(ret==1)
     {
          printf("little\n");//小端
     }
     else
          printf("bigger\n");//大端
          
     return 0;
}

结果:

wKiom1Zhnx7SqMDpAAAOtKNHO7Y799.png

【分析过程】

wKiom1ZhpBaQ1-qJAAAoSz113iw189.png


    【方法2

        由于它只需要检测内存中一个字节中存放的数据,所以这里可以巧妙的运用联合体的一个特性;

什么是联合体?

联合体的定义

定义一个联合类型的一般形式为:  
union 联合名  
 
成员表  
};
成员表中含有若干成员,成员的一般形式为: 类型说明符 成员名 成员名的命名应符合标识符的规定。

联合体中可以定义不同类型的变量,但是内存分配是按照占用内存最大的类型来分配空间的,每个变量都在这块空间里面放着。

#include <stdio.h>
int check_bit()
{
     union UN
     {
          char c;
          int i;
     }un;
     
     un.i=1;    //初始化i  二进制(32位)表示:00000000 00000000 00000000 00000001
     
     if (un.c==1) 
     {
          return 1;//c是char类型,只访问一个字节
     }
     else
          return 0;
}
int main()
{
     int ret=check_bit();
     
     if (ret==1)
     {
          printf("little\n");//小端
     }
     else
          printf("bigger\n");//大端
          
     return 0;
}

结果:

wKioL1ZhoZnwqXYkAAAL9iGiwb0338.png

【分析过程】

wKioL1ZhtjfTYhhTAAA3bgNSkFM948.png


你可能感兴趣的:(数据存储模式)