小端存储和大端存储
小端存储(Little_endian):字数据的高字节存储在高地址中,而字数据的低字节存储在低地址中。
大端存储(Big_endian):字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。
如何判断cpu是大端存储还是小端存储呢?
方法一.直接看内存进行判断
方法二.编写一个程序进行判断
方法一:
查看底下代码的存储
#include<stdio.h>
int main()
{
unsigned char str[4]={1,0,0,0};
return 0;
}
方法二:
//程序一如下:(指针判断)
#include<stdio.h>
int main()
{
unsigned char str[4]={1,0,0,0}
unsigned int*i=(unsigned int *)str; //无符号char类型占用一个字节,无符号整型占用4个字节
if(*i==1) //小端低位在低地址存储即 0001被解释为1
printf("Little_endian\n");
else if(*i==1000) //大端低位在高地址存储 即 1000被解释为1000
printf("Big_endian\n");
return 0;
}
//程序二如下:(共用体union判断)
#include<stdio.h>
int checkSystem( )
{
union check
{
int i;
char ch;
} c;
c.i = 1;
return (c.ch ==1);
}
int main()
{
if(checkSystem( )==1)
printf("little_endian");
else if(checkSystem()==1000)
printf("big_endian");
return 0;
}
//另一种写法
#include<stdio.h>
int checkSystem( )
{
union check
{
int i;
char ch;
} c;
c.i = 1;
return (c.ch ==1);
}
int main(){
if( checkSystem( )== 1)
printf("Little_endian\n");
else if(checkSystem( ) == 1000000)
printf("Big_endian\n");
return 0;
}
多说一句:大端存储以ARM为代表 精简指令集 功耗少 移动设备 网络通讯以大端存储为主
小端存储以Intel为代表 复杂指令集 功耗大 桌面设备