一、大小端

1、为啥会有大小端

在计算机系统中以字节为单位,每个地址单位都有一个字节(一个字节8个bit位)。在C语言中,有char(8bit)、short(16bit)、long(32bit,具体看编译器)。对于位数大于8的处理器,不如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在一个如何将多个字节安排的问题。so就有了大端存储模式和小端存储模式


2、大小端的概念区分


(1)大端(Big_endian):数据的高字节保存在内存的低地址处,数据的低字节保存在内存的高地址。这个存储模式类似将数据当做字符串处理:地址由小到大增加,数据由高到低存放。

(2)小端(Little_endian):数据的高字节保存在内存的高地址处,数据的低字节保存在内存的低地址。这样子的存储模式和我们逻辑思维方式一样,将地址的高低位和数据权位有效对应起来,高地址对应权值高的,低地址对应权值低的。

提示:对于x86架构,一般网络字节序都是大端,本地字节序都是小端。

微信图片_20210922232215.png

测试代码:

#include <stdio.h>
#include <stdint.h>

int main(int argc, char const *argv[])
{
    uint16_t a = 0x1234;

    (*(char *)&a) == 0x34 ? puts("小端系统") : puts("大端系统");

    return 0;
}

运行结果:

微信图片_20211016125423.png

检查系统大小端:
QQ图片20211016125946.png

可以看到系统就是小端

点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

验题君 2年前 回复TA
这个很有价值,估计很多人还不知道~