数据在内存中的存储--整型

一、数据类型介绍

c语言中的基本的数据类型主要有这么几种

(1)char   字符数据类型

(2)short   短整型

(3)int       整型

(4)long    长整型

(5)long long 更长的整型

(6)float      单精度浮点数

(7)double  双精度浮点数

如果整型还要进行细分的话,又可以分为有符号(signed)整型和无符号(unsigned)整型。如果是有符号整型,那最高位是符号位,如果是无符号整型,那全部位都是有效位,举个例子吧:

signed char: 10001111   表示-15

unsigned char:10001111 表示143

首先我们先来看一下整型家族里面有哪些成员

(1)char    unsigned char                 signed char

(因为字符在存储的时候,存储的是ASCII码值,ASCII码值是整型数据,所以char归类的时候放在整型家族)

(2)short     unsigned short  [int]       signed short [int]

(3)int          unsigned int                  signed int

(4)long        unsigned long  [int]      signed long [int]

(5)long long   unsigned long long [int]       signed long long [int]

二、原码,反码和补码的转换

整型数据的二进制表示形式有3种:原码,反码和补码,在内存中整型数据是以补码的形式存储的。它们的转换方法如下图所示:

举个例子来说吧,我们都知道整型在内存中占4个字节,一个字节有8个二进制位,那一个数用二进制表示出来共有32位,因为正数的原码,反码和补码都一样,所以我们拿一个负数来举个例子:

 比如这个数是-10,那么它用二进制来表示就是10000000 00000000 00000000 00001010,这里最高位是符号位,0表示正,1表示负。

原码:10000000 00000000 00000000 00001010

反码:11111111   11111111    11111111   11110101

补码:11111111   11111111    11111111   11110110

如果是补码转原码,首先末位减一,然后除符号位其余按位取反。

三、大端字节序存储和小端字节序存储

如果宝子们想看看数据在内存中到底是怎么存放的,可以这么操作:

首先,第一步,打开VS,我们先定义一个整型变量a,然后给它一个值,这里我们为了方便观察,可以给它赋一个16进制的值。为啥呢,虽然这些数本质上在内存中存放的是二进制,但是在VS上为了方便展示,显示的是16进制。

然后,按F10开始调试,接着在调试 > 窗口 > 内存 >,随便点一个内存都可以

然后我们就可以看到这个界面了

但是这里我们看到a的值在内存里是倒着存放的,为啥呢,因为这里的存储方式是小端存储,大端存储和小端存储的区别如下图所示:

这里给宝子们解释一下:

1.字节序:是以字节为单位,讨论存储顺序的

2.小端字节序存储:把一个数据的低位字节的内容,存放在低地址处,把一个数据高位字节的内容,存放在高地址处。

大端字节序存储:把一个数据低位字节的内容,存放在高地址处,把一个数据高位字节的内容,存放在低地址处。

如果有老铁搞不清什么是低位字节或者高位字节的内容的话,可以拿十进制的数来理解,比如123,3是个位,2是十位,1是百位,那么1就是高位,3就是低位。我们上面给出的16进制的数也一样,0x11223344,11就是高位,44就是低位。这么解释应该可以理解吧。

那我们了解了大端和小端后,我们就知道为啥在这里数据是倒着放的了。

3.写一个程序来判断是大端存储还是小端存储

首先我们需要先定义一个整型变量a,然后把给a赋值1。

&a就可以拿到a的地址,为了方面观察,我们将它强制类型转换为char*,为啥要强制类型转换,因为整型一次性可以访问4个字节,而char一次性只可以访问一个字节,我们只需要看第一个字节即可。如下图所示:

代码如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值