首页 > 其他 > 详细

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

时间:2015-12-05 01:56:17      阅读:241      评论:0      收藏:0      [点我收藏+]

如何判断自己电脑数据存放模式呢,首先数据存放模式有两种,一种叫做大端模式,一种叫小端模式;什么是大端模式,小端模式呢,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;
}

结果:

技术分享

【分析过程】

技术分享


    【方法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;
}

结果:

技术分享

【分析过程】

技术分享


本文出自 “Pzd流川枫” 博客,请务必保留此出处http://xujiafan.blog.51cto.com/10778767/1719750

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

原文:http://xujiafan.blog.51cto.com/10778767/1719750

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!