数据在内存中的存储(上)

目录

1、数据类型的详细介绍

2、整型在内存中存储的原码、反码、补码。

3、大小端字节序介绍及判断

1、数据类型的详细介绍

首先目前学过的数据类型有:

整型:

char

shor

int 

long 

long long

浮点型:

float

double

构造类型:

数组类型

结构体 struct

枚举enum

联合体union

指针类型:

int * pi

char* pi

float* pi

void* pi

空类型

void

2、整型在内存中存储的原码、反码、补码。

数据在内存中是以2进制的形式存储的

对于整数来说

整数二进制有三种表示形式:原码、反码、补码。

正整数的原码、反码、补码是相同的

负数的原码、反码、补码是要进行计算的。

例如:

int main()
{
    int a = -10;
    return 0;
}

这里变量 a 的原码是

10000000 00000000 00000000 00001010  -原码

(注:最高位是符号位 0 为正数 ,1 为负数)

11111111111111111111111111111111110101 -反码

(符号位不变,其他位按位取反得到反码)

11111111111111111111111111111111110110-补码

(反码+1得到补码)

而整数在内存中的存储,存的就是补码

所以在内存中 应该是 ff ff ff f6

 但是这里我们看到的又是 f6 ff ff ff 

这是为什么呢?

3、大小端字节序的判断与介绍

上面我们所说,整数在内存中存储的应该是补码的形式

并且-10转换为补码的16进制应该是 ff ff ff f6

当我们看内存的时候却是 f6 ff ff ff

 

这时我们就要讨论大小端字节序了

什么事大小端字节序?

 我们举一个例子:

int main()
{
    int a = 0x11223344;
    return 0;
}

我们假设左边是低地址,右边是高地址

 如果我们低地址处放的内容是44 高地址处放的是11 则我们的编译器是小端存储

如果我们低地址处的内容放的是11,高地址处放的是44 则我们的编译器是大端存储

究竟是如何的呢? 让我们一起来看一下内存

可以看到 在内存中存储的样式是44 33 22 11

 

 并且从左到右,从上到下的地址是增加的 由此可知我们在vs2019的编译器底下的存储方式是小端存储的

那么我们该如何用一个程序来判断某一个编译器是大端存储的还是小端存储的呢?

这里有一个简单的过程给大家展示

 我们用一个字符型的指针来访问一个整型的第一个字节是多少 就可以判断该编译器是大端存储还是小端存储了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值