c/c++ 数据在内存中的存储

1、字节存储顺序:

数据在内存中存储,不同的数据类型对应着不同的字节数,char类型数据占据一个字节,short类型数据占据2个字节,int类型数据占据4个字节,那么当超过一个字节的数据在内存中存储的时候,就会衍生出存储顺序的问题,分别为:大端字节序存储和小端字节序存储。

大端字节序存储模式:是指数据的 低位字节保存在内存的高地址处 ,而数据 的高位字节保存在内存的地地址处。
小端字节序存储模式:是指数据的 低位字节保存在内存的低地址处,数据的高位字节保存在内存的高地址处。
怎么理解数据的低位和高位?参考如下十进制
c/c++ 数据在内存中的存储_第1张图片

 当我们知道了数据的低位跟高位含义后,我们来通过编译器看看在vs里面数据是如何存储的?

c/c++ 数据在内存中的存储_第2张图片

2、整型在内存中的存储

整型的数据在内存中都是以补码的形式来存储的。以下是不同数据类型在内存中的有效取值范围:

2.1、取值范围

c/c++ 数据在内存中的存储_第3张图片

 c/c++ 数据在内存中的存储_第4张图片

2.2、截断与提升

%d 打印数据  ------>  整型打印 && 有符号

整型打印是将不满足4个字节的数据提升到4个字节

有符号:无符号数据全面全部补0变成有符号数据。

c/c++ 数据在内存中的存储_第5张图片

 如何进行整形提升呢?

1:有符号整数提升是按照变量的数据类型的符号位来提升的。----->signed int,int

2:无符号整型提升,高位补0-------->unsigned int 

char c1 = -1 ;
变量 c1 的⼆进制位 ( 补码 ) 中只有 8 个⽐特位:c1---> 1111 1111
因为 char 为有符号的 char
所以整形提升的时候,高位补充符号位,即为 1
提升之后的结果是:
11111111111111111111111111111111
正数整型提升:
char c2 = 1 ;
变量 c2 的⼆进制位 ( 补码 ) 中只有 8 个⽐特位:
00000001
因为 char 为有符号的 char
所以整形提升的时候,⾼位补充符号位,即为 0
提升之后的结果是:
00000000000000000000000000000001

 

 

 

你可能感兴趣的:(c语言,开发语言)