整型在内存中是怎么存储的呢?让我们看一下下面的图

整型在内存中的存储_C语言

内存中显示的是十六进制;每4个bit位换一个十六进制位,图中的0a就对应一个字节;整数分为有符号数和无符号数。

有符号数包括:正数和负数。有符号数最高位是符号位,0表示正,1表示负。

无符号数没有正负之分,只有正数。无符号数最高位是有效位。

整数有三种表示形式,原码,反码和补码。正数的原-反-补相同。负数的原码-反码-补码的关系是:原码符号位不变,其它位按位取反的反码;反码加1得补码的关系;

那么整数在内存中是以哪种形式存的呢?

通过分析得到的答案是补码。

我们先直接写出整型a的原码是:

整型在内存中的存储_C语言_02

现在我们给一个整型变量b

整型在内存中的存储_C语言_03

由于CPU中只有加法运算器 a-b应转换为a+(-b)求解

如果简单粗暴用原码直接相加,并用原码存在内存中,所得的结果是不符合的。

整型在内存中的存储_C语言_04

而用补码来运算和存储则能巧妙的解决掉这个问题

整型在内存中的存储_C语言_05

所以整型再内存中是以补码的形式存储的。

那么转换为十六进制的整数10应为0x0000000a,而内存中的倒序存的,这是怎么回事呢?

这就牵扯到大小端(字节序)存储模式了

地址有分高地址和低地址,字节有分高字节和低字节。内存单元编号高的就是高地址,字节位高的就是高字节。比如0x0053FA90相对于0x0053FA89就是高地址,0x11223344中33字节就是44的高字节。​

大端字节序存储模式:高字节放在低地址处,低字节放在高地址处。

整型在内存中的存储_C语言_06

小端字节序存储模式:高字节放在高地址处,低字节放在低地址处。

整型在内存中的存储_C语言_07

看到这里,你应该知道整型在内存中的存储是什么样的了吧!

求点赞!\<&_&>/