数据在内存中的存储

(一)、数据类型

(二)、整型数据储存规则

(三)、浮点型数据储存和取出规则


(一)、数据类型

(注:不同的类型在内存中申请不同大小内存来存放数据)

1.整型家族

<<1.>>

类型                                                                                                               大小(32位)【64位】 

char(因为字符存储的实质是ASCLL码值,所以归结到整型家族中)                1                    1  

short                                                                                                                     2                    2

int                                                                                                                         4                    4

long                                                                                                                      4                    8       ( 单位:字节

.....

<<2.>>有无符号

a,有符号 signed  最高位是符号位  0表示正数 1表示负数

b,无符号unsigned   最高位是0或者是1(即2的31次方)

c,除了char以外,int 同时表示signed int ,short....同理

d,对于char来讲比较复杂,在讲完整型存储规则之后附加例题讲解

2.浮点型家族

类型       大小(单位:字节) 

float          4

double      8

(二)、整型储存规则

1.规则:整型数据以二进制的补码进行储存。

2.一个整数占4个字节也就是32个比特位,即是二进制的32位。

3.二进制有三种表现形式:原码 反码 补码

对于正整数来讲,原反补码保持一致

对于负整数来讲,换算规则是原码除了符号位以外的数据按位取反再加1得到补码(注:这个过程是互逆的,补码除了符号位以外的数据按位取反再加1得到原码)

例:

int  a= -21

原码  10000000 00000000 00000000 00010101

反码  111111111 111111111 111111111 11101010

补码 111111111 111111111 111111111 11101011

十六进制  0x  ff  ff  ff  eb

(补充:此处十六进制换算法则:

 

 

在vs2019内存调试中是以十六进制的形式显示出来,并且显示规则为小端。

4.作为补充内容:大端和小端。

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

小端则和大端相反。

以上面-21为例:

补码  111111111 111111111 111111111 11101011

          高字节序                                                低字节序

vs环境内存  左侧为低地址  右侧为高地址  存储规则为小端

(大端和小端与硬件有关,X86结构是小端储存的还有DSP、ARM:而KEIL和C51则是大端储存)

5.char类型(该部分例子为了更好理解数据的存储和取出,例子几乎没有实际应用价值)

在vs环境下char和signed char是一样的,但是在存储和取出使用时有以下注意事项:

<<1.>>以整形存储char类型时,要经过整型,截断再存储

<<2.>>在以整型方式取出使用时,要进行整型提升(在整型提升过程要注意类型,char类型则是最高位是什么就补什么,而unsigned char

则一律补0)

 如图,最后一个的c和上面格格不入是因为在整型提升的过程中数据的运算规则出现不同。

对于c的解释如下(配合5.char类型下注意事项):

(从整型出发) -1的补码: 11111111 11111111 11111111 11111111  

(截断:截低位,就是从后向前截)   1111 1111 (截断8比特位是因为char占一个字节大小)

(整型提升:因为c的类型是unsigned ,补充都为0) 0000 0000 0000 0000 0000 0000 1111 1111

最后打印为%d 打印整数,因为c是无符号视为正数,原码反码补码一致,打印数值根据其原码,最后的结果为255.

(三)、浮点型数据储存和取出规则

<<1.>>

1.浮点型数据的存储规则:存储其科学计数法的 S M E。

介绍S M f

以float=5.5f为例

  十进制    5                           .               5

二进制    1      0             1        .               1

                     2的1次方  2的0次方            2的-1次方 .....

科学计数法  (-1)^0*1.011*2^2

(-1)的S次方 * 1.011 * 2的E次方    (S表示正负,M为有效值(例子中的1.011),E表示向前挪动几位)

2.float类型

内存分布   (S为1比特位,E为8个比特位,M为23比特位)

SE EEEEEEEMMM.......

S为0或1;E为位数+127;M即省略个位1后的数从前向后存储即可无数记为0。

float=5.5的内存存储:

01000000101100000000000000000000

对于double与float的不同是E为位数+1023和内存的大小不同

(S为1比特位,E为11个比特位,M为52比特位)

<<2.>>浮点型数据的取出规则

分三种情况

1.当E不全为0或不全为1时:

怎样存储则怎样取出,别忘记给有效值补充1

2.当E全为0时:

E指数的位数恒为1-127(或1023),有效值不可在补充1,表示很接近0的小数。

3.当E全为1时:

不用计算,视为正负无穷。(读者可以按照上面思路自己想一想,也可在讨论区讨论)

(四)、小结

本期的内容大致就是这些,读者有什么问题可以私信我或者在评论区提问,我会在看到后第一时间回复。

因为也是第一次写这些内容,有不对或者欠缺的地方请大家指正,讨论后会第一时间改正。

小编也是一个正在学习编程的菜鸟,写文章的目的就是能够和大家一起学习知识和巩固知识,如果大家觉着我的内容可以,请三连支持一波。

最后,如果您对我的内容有什么意见和建议,请私信我,我们一起讨论进步。非常感谢您的阅读和支持。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值