C语言整形数据在内存中的存储

先说结论:整数在内存中是以二进制的补码进行存储的 

只要是char、short、int、long修饰的变量都可以理解为整数,也就是以二进制的补码进行存储。

而变量的创建是需要在内存中开辟空间的。空间的大小是根据不同的类型而决定的。比如创建一个int型的变量需要在内存中开辟四个字节的空间大小,char开辟一个字节的空间大小,等等。

一、概念:

下面我们先来了解一下和补码相关的概念。

0、前言

整数有三种表现形式:原码、反码、补码。正数三码合一:原码、反码和补码是相同的,而负数要明确的区分原码、反码、补码。

1、原码

将十进制数写成二进制的形式,最高位为符号位,正数补0,负数补1

例如:

//10-->1010-->补齐-->00000000  00000000  00000000 00001010

//-3-->0011-->补齐-->10000000  00000000  00000000 00000011

补充:因为一个整型数字(int)占4个字节,就是32个比特位,所以要补齐32位

2、反码

符号位不变其他位按位取反

例如:

//原码10000000 00000000 00000000 00000011
//反码11111111 11111111 11111111 11111100

3、补码=反码+1

//反码11111111 11111111 11111111 11111100
//加一00000000 00000000 00000000 00000001

//补码11111111 11111111 11111111 11111101

所以-3在内存中就是11111111 11111111 11111111 11111101这样存储的,但是编译器(以VS 为例)为了方便显示在屏幕上,会以16进制的形式表现出来。而十进制-3转换为16进制数就是FF FF FF FD

如图所示

 下面再看一下正数

1--->00000000000000000000000000000001(三码合一)就看作是补码

所以1在内存中就是00000000000000000000000000000001,为了方便显示会以16进制数表现出来。转换为16进制数就是00 00 00 01

二、存储模式:

我们可以发现-3和1是以补码的形式进行存储的,但是顺序似乎有点不对劲。这里就牵扯到了数据的存储模式。1、大端存储(大端字节序);2、小端存储(小端字节序)。不同的编译器有不同的存储模式,可能是大端也可能是小端。

区分:大端字节序和小端字节序

1、大端存储:

低位数字存储的是高位的地址,高位数字存储的是地位的地址,表现形式上为正序。

2、小端存储:

低位数字存储的是低位的地址,高位数字存储的是高位的地址,表现形式上为倒叙。

如下图所示:

 由上图我们可以不难看出vs编译器是小端存储模式。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值