通过上篇文章,我们知道了整形变量在内存中是以二进制方式存储的,今天我们来聊一聊,它的存储顺序(大小端)
目录
一、什么是大小端?
二、如何判断是大端存储还是小端存储
对于一个由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 评论