目录
引言
一个内存单元是一个字节,并且对应一个地址。当存储多个字节的数据时(int,short,double.....)
,就会出现一个问题,高地址处存高位字节还是低位字节。于是就出现了两种存储模式。
大端(字节序)存储模式
数据低位放在高地址处,数据高位放低地址处。
int a=0x 00 00 00 01(两位十六进制数表示一个字节)
小端(字节序)存储模式
数据低位放在低地址处,数据高位放在高地址处。
int a=0x 00 00 00 01(两位十六进制数表示一个字节)
用代码来判断计算机的存储模式
方法(1)
#include<stdio.h> int main() { int a = 1; char *p = (char*)&a;//从低地址处,取出第一个字节 if (*p == 1) printf("小端\n"); else printf("大端\n"); }
方法(2)
使用联合体的方法
定义一个联合体
union U { char a; int b; };
a,b共用同一块儿内存,若定义一个联合体变量,给成员b赋值1。
如果是小端存储:
读取成员a的大小为1
如果是大端存储:
读取成员a的大小为0
于是就可以完成代码
int main() { union U p; p.b = 1; if (p.a == 1) printf("小端\n"); else printf("大端\n"); }