推荐答案
// www.javascriptcn.com code example
#include <stdio.h>
int main() {
int num = 1;
if (*(char *)&num == 1) {
printf("Little Endian\n");
} else {
printf("Big Endian\n");
}
return 0;
}本题详细解读
什么是大端序和小端序?
- 大端序(Big Endian):数据的高字节存储在内存的低地址处,低字节存储在内存的高地址处。
- 小端序(Little Endian):数据的低字节存储在内存的低地址处,高字节存储在内存的高地址处。
代码解析
定义一个整数变量
num并赋值为 1:- 在内存中,整数
1的二进制表示为00000000 00000000 00000000 00000001(假设为32位系统)。 - 在大端序系统中,内存布局为:
00 00 00 01。 - 在小端序系统中,内存布局为:
01 00 00 00。
- 在内存中,整数
将
num的地址强制转换为char指针:(char *)&num将num的地址转换为指向char类型的指针,这样可以通过该指针访问num的第一个字节。
判断第一个字节的值:
*(char *)&num解引用该指针,获取num的第一个字节的值。- 如果第一个字节的值为
1,则说明系统是小端序;否则,系统是大端序。
总结
通过检查整数 1 在内存中的存储方式,可以轻松判断系统是大端序还是小端序。这种方法简单、直接,适用于大多数情况。