您的位置:首页 > 编程语言 > C语言/C++

如何测试你的系统是大端还是小端模式

2016-11-26 14:25 225 查看
我们先来看看为什么会有大小端之分呢?

在计算机系统中,规定:每个地址单元都会对应一个字节(8个bit),但是,在c语言中,除了有一个字节(8个bit)的char,也有两个字节(16个bit)的short,也有四个字节(32个bit)的long(在不同的编译器下可能不同)。对于16位或者32位的处理器,即就是大于8位的处理器,由于寄存器的宽度大于一个字节,那么就存在如何将一个多字节的变量的数据如何存放的问题——所以,就有了大小端之分。

首先,应该明确的是:

数据有高位和低位之分

地址有低地址和高地址之分

大小端的理解:

小端:将数据的低位存放在低地址处,将数据的高位存放在高地址处。

大端:将数据的低位存放在高地址处,将数据的高位存放在低地址处。

方法一:使用联合体测试:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

int CheckSystem()
{
union check
{
int i;
char ch;
}c;
c.i = 1;
return (c.ch == 1);
}

int main()
{
int ret = CheckSystem();
printf("ret : %d\n",ret);
system("pause");
return 0;
}


程序的解析:



方法二:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>

int CheckSystem()
{
int a = 1;
if (*((char *)(&a)) == 1)
{
return 1;
}
return 0;
}

int main()
{
int ret = CheckSystem();
printf("ret : %d\n",ret);
system("pause");
return 0;
}




方法三:



大小端的问题其实就是看数据在内存中是如何存放的,低位的数据是在低地址还是在高地址处存放的,所以无论多少种方法,实现的思想都是一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言 大小端