#include <stdio.h> /* 关于字节序: 对于一个整数0x12346=5678,在内存中占4个字节 从低地址开始,每个字节分别存的是 12,34,56,78就说明是大端CPU; 用于网络编程,JAVA 从低地址开始,每个字节分别存的是 78,56,34,12就说明是小端CPU; x86架构是小端 下面判断在内存的单个字节中二进位是按什么顺序排的? */ //定义位域 typedef struct bit_field { unsigned char b0:1; //b0指向低地址那一端的第一位,b1、b2依次排列下去 unsigned char b1:1; unsigned char b2:1; unsigned char b3:1; unsigned char b4:1; unsigned char b5:1; unsigned char b6:1; unsigned char b7:1; }BIT_FIELD; int main() { int i = 0xFF00001B; //小端存放方式 1B 00 00 FF BIT_FIELD * p = ( BIT_FIELD * )&i; // p指向 1B printf("%u ",p->b0); printf("%u ",p->b1); printf("%u ",p->b2); printf("%u ",p->b3); printf("%u ",p->b4); printf("%u ",p->b5); printf("%u ",p->b6); printf("%un",p->b7); getchar(); return 0; }
输出结果:1 1 0 1 1 0 0 0
在小端机器上验证得到, 在一个字节内部, 低位放在靠近低地址这个方向上。大端方式的高位靠近低地址方向存放。