什么是大小端?如何判断大小端

       通过上篇文章,我们知道了整形变量在内存中是以二进制方式存储的,今天我们来聊一聊,它的存储顺序(大小端)

目录

一、什么是大小端?

二、如何判断是大端存储还是小端存储


对于一个由2个字节组成的16进制整数,在内存中存储这两个字节有两种方法:一种是将低序字节存储在起始地址(低地址),这称为小端(little-endian)字节序;另一种方法是将高序字节存储在起始地址(低地址),这称为大端(big-endian)字节序。

1字节=8个二进制位

注释:(什么是低序字节、高序字节)

int main () 
{
     int a=2;
     return 0;
}
(未存储时)a=2转化为16进制时为:(00就是高序字节)0x00  00  00  02(02就是低序字节)

小端存储:

大端存储:

总结

小端存储:低序字节放到低地址,高序字节放到高序地址。        =====》低√低,高√高

大端存储:高序字节放到低地址,低序字节放到高地址。           =====》高√低

二、如何判断是大端存储还是小端存储

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{int a = 1;char* p = (char*)&a;if (*p == 1){printf("小端\n");}else{printf("大端\n");}return 0;
}

原理:电脑读取内存是从内存的低地址开始读取的,所以只要知道第一个或者最后一个字节的值就可以判断大小端了,那么如何得到第一个字节呢?

这里需要补充一个东西:访问权限。

指针的类型决定了指针的访问权限

对于char*型指针它的访问权限为1byte(因为char型变量的内存大小就是1byte),同理,int*类型的指针它的访问权限为4byte。所以我们可以用char类型的指针获得int a的一个字节。

上一篇文章:整形变量在内存中的存储链接:

写文章-CSDN博客https://mp.csdn.net/mp_blog/creation/editor/123248536

求关注

本文链接:https://my.lmcjl.com/post/10358.html

展开阅读全文

4 评论

留下您的评论.