如何判断自己电脑数据存放模式呢,首先数据存放模式有两种,一种叫做大端模式,一种叫小端模式;什么是大端模式,小端模式呢,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;
}
结果:
【分析过程】
转载于:https://blog.51cto.com/xujiafan/1719750