数据在内存中存储方式详解

目录

一、数据类型分类

1.整型家族

2.浮点数家族

3.构造类型(自定义类型)

4.指针类型

5.空类型 void

二、整型数据内存中的存储

1.原码、反码、补码

2.大小端问题

3.有符号数和无符号数的取值范围如何确定?

三、浮点数在内存中的存储

1.浮点数的存储规则


一、数据类型分类

1.整型家族

char  (可能为有符号也可能为无符号字符类型,取决于编译器)

signed char/unsigned char           

short (short默认为signed short,其中signed short int就是短整型,可以省略为short)

signed short/unsigned short

int (默认为signed  int) 

unsigned int/signed int

long(默认为signed long,其中signed long int就是长整型,省略为long)

unsigned long/signed long

2.浮点数家族

float  内存中占4字节

double 内存中占8字节

3.构造类型(自定义类型)

数组类型 

结构体类型 struct

枚举类型 enum

联合体类型 union

4.指针类型

int*pf

char*pv

void*pl...

5.空类型 void

函数参数 

函数返回类型

空指针类型

二、整型数据内存中的存储

1.原码、反码、补码

整型数据在计算机中有三种二进制存储方式,分别为原码、反码、补码,其中整型在内存中以补码 的形式存放

原码就是该整型数据本身转换的二进制大小,其中有符号数的最高位为符号位,其余位是数值位,若为整数,符号位为0,若为负数,符号位为1;

反码是原码的符号位不变,其余位按位取反;

补码是反码加一得到。

int a = 10;
//00000000000000000000000000001010  -原码(正数,最高位符号位为0)
//01111111111111111111111111110101  -反码(符号位不变,其余按位取反)
//01111111111111111111111111110110  -补码(反码加一)
int b = -10;
//10000000000000000000000000001010  -原码(负数,最高位符号位为1)
//11111111111111111111111111110101  -反码(符号位不变,其余按位取反)
//11111111111111111111111111110110  -补码(反码加一)

从原码到反码有一种方式:取反加一

从反码到原码有两种方式:①取反加一;②减一取反

其中取反在有符号数中都是符号位不变,其他位按位取反

由此可知,补码和原码的相互转换,其运算过程是相同的,不需要额外的硬件电路;同时,由于内存中存放的是补码,就可以将符号位和数值域统一处理,cpu只有加法器,加减法可以统一处理

2.大小端问题

数据存储在内存中,整型数据是以字节为单位存储的,只要数据超出一个字节的大小,就涉及到在内存中存放的顺序问题,通常上,我们使用的是大小端的存放方法:

大端存储:数据的高位存放在内存的低地址处,低位存放在内存的高地址处;

小端存储:数据的低位存放在内存的低地址处,高位存放在内存的高地址处。

3.有符号数和无符号数的取值范围如何确定?

char类型在内存中占一个字节,有符号数的范围为-128~127、无符号数范围0~255,超出该范围大小的数字发生截断,留下八位存放在char类型中

 同样的,short类型,有符号数范围为-32768~32767,无符号数为0~65535

要注意的是:无符号数在作为循环中的判断条件时容易导致死循环。

三、浮点数在内存中的存储

1.浮点数的存储规则

根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:

(-1)^S * M * 2^E

(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。

M表示有效数字,大于等于1,小于2。

2^E表示指数位。

IEEE 754规定:

对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。

对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值