C语言 之 整数在内存中的存储、大小端字节序和字节序的判断

文章目录

整数在内存中的存储

整数的2进制表示方法有三种,即 原码、反码和补码

三种表示方法均有符号位和数值位两部分,符号位用0表示"正",用1表示"负",而数值位最

高位的⼀位是被当做符号位,剩余的都是数值位。

正整数的原、反、补码都相同。

负整数的三种表示方法各不相同。

原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。

反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。

补码:反码+1就得到补码。

对于整形来说:数据存放内存中存放的是补码。

大小端字节序和字节序判断

例子:

复制代码
#include <stdio.h>
int main()
{
	int a = 0x11223344;

	return 0;
}

在这个例子中 int a = 0x11223344; 其中0x的意思是将11223344 以16进制的形式存储,我们前面也提到过,16进制的1个位需要2进制的4个位来表示 ,比如16进制f表示15,那么2进制表示15就是1111,我们又知道这个a是整形,大小为4个字节,1个字节等于8个位,那么2个16进制位就刚好占用一个字节

通过调试的内存窗口,我们可以看到在a中的 0x11223344 这个数字是按照字节为单位,倒着存储的。这就是大小端的不同

大小端

其实超过⼀个字节的数据在内存中存储的时候,就会有存储顺序的问题,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储,下面是具体的概念:

⼤端(存储)模式:是指数据的低位字节内容 保存在内存的高地址 处,而数据的高位字节内容 ,保存在内存的低地址 处。

小端(存储)模式:是指数据的低位字节内容 保存在内存的低地址 处,而数据的高位字节内容 ,保存在内存的高地址处。

有大小端的原因

这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着⼀个字节,⼀个字节为8

bit 位,但是在C语言中除了8 bit 的 char 之外,还有16 bit 的 short 型,32 bit 的 long 型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于⼀个字节,那么必然存在着⼀个如何将多个字节安排的问题 。因此就导致了⼤端存储模式和小端存

储模式。

知道是大小端之后,在像我们例子中的情况我们就可以知道内存中下一个地址单元所对应的内容

高位和地位怎么区分?

其实高位和地位的区分就类似于我们的阿拉伯数字,例如数字123,3是个位,2是十位,1是百位,那么3就是低位,所以类似的,0x11223344中,44就是低位了

图例

判断机器大端还是小端的例题

复制代码
#include <stdio.h>
int check_sys()
{
 int i = 1;
 return (*(char *)&i);
}
int main()
{
 int ret = check_sys();
 if(ret == 1)
 {
 printf("小端\n");
 }
 else
 {
 printf("大端\n");
 }
 return 0;
}

解析: 因为我们知道i为整形,大小为4个字节,而整形在空间中是使用二进制的方式进行存储的,return (*(char *)&i);之所以要将i强转为char* 类型,就是因为char* 只能读取一个字节大小的空间,i在内存空间中,肯定是一端为0,一端为1,i的二进制的形式那就是最右端为1,即1为低位,当使用char*去读取这个i的内存空间时,访问的是低地址位置,若解引用得到的值是1,那就符合小端,反之则大端

输出结果:

相关推荐
范纹杉想快点毕业2 分钟前
以项目的方式学QT开发C++(二)——超详细讲解(120000多字详细讲解,涵盖qt大量知识)逐步更新!
c语言·开发语言·c++·windows·vscode·qt·visual studio
少了一只鹅32 分钟前
c语言内存函数
c语言·开发语言
映秀小子1 小时前
C语言链表的操作
c语言·开发语言·链表
小辉懂编程8 小时前
C语言:51单片机实现数码管依次循环显示【1~F】课堂练习
c语言·开发语言·51单片机
Inverse16210 小时前
C语言_动态内存管理
c语言·数据结构·算法
whoarethenext12 小时前
c/c++的opencv的轮廓匹配初识
c语言·c++·opencv
apocelipes12 小时前
使用libdivide加速整数除法运算
c语言·c++·性能优化·linux编程
青出于兰13 小时前
C语言| 指针变量的定义
c语言·开发语言
思茂信息18 小时前
CST软件对OPERA&CST软件联合仿真汽车无线充电站对人体的影响
c语言·开发语言·人工智能·matlab·汽车·软件构建
川川菜鸟18 小时前
2025长三角数学建模C题完整思路
c语言·开发语言·数学建模