C语言-数据在内存中的存储

一、数据类型

char //字符数据类型
short //短整型
int //整型
long //长整型
long long //更长的整型
float //单精度浮点数
double //双精度浮点数

以上七种数据类型可以分为两类
1.整型家族(char、short、int、long、long long)
2.浮点型家族(float、double)

二、整数在内存中的存储

2.1、原码、反码、补码

   计算机中的整数有三种2进制表示方法,即原码、反码和补码。
   三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而
正数的原、反、补码都相同。
   负整数的三种表示方法各不相同。
   **原码:正负形式直接写出二进制序列
   反码:原码符号位不变,其他位按位取反
   补码:反码加一**
    eg. b=-10
    二进制表示
    1000 0000  0000 0000  0000 0000  0000 1010   ->原码
    1111 1111  1111 1111  1111 1111  1111 0101   ->反码
    1111 1111  1111 1111  1111 1111  1111 0110   ->补码
    十六进制表示
    0x 80 00 00 0a  ->原码
    0x ff ff ff f5  ->反码
    0x ff ff ff f6  ->补码
知识点1. 整数家族在内存中存补码,且倒着存(VS环境下,为小端字节序存储)
         why.更方便计算,CPU只有加法器,存补码运算时可以直接用补码相加。
知识点2. 原码->补码:取反加一
         补码->原码:取反加一
知识点3. 整型家族都可分为 signed 和 unsigned
知识点4. signed 整型存储时第一位为符号位,不是有效位
         unsigned整型存储时第一位为有效位,没有符号

2.2、大小端

**大端字节序存储、小端字节序存储**

大端字节序存储:把一个数的高位字节序放在低地址
小端字节序存储:把一个数的高位字节序放在高地址

eg. 0x 11 22 33 44
      高位      低位

在这里插入图片描述

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

3.1存

 浮点数都可以写为
         **V=(-1)^S * M * 2^E**
         
 eg. 5.0f ----->101.0 ----->(-1)^0 * 1.01 * 2^2
     9.5f ----->1001.1 ----->(-1)^0 * 1.0011 * 2^3
     9.6f ----->无法精确用二进制表示,因此无法精确保存
     
 **存储时是对S、M、E进行存储**
 
 1.因为M是1到2的一个数,小数点前一定会有一个1,所以不用存这个1
 2.对于指数E,存储时要加上127(32位)或者1023(86位),再转为二进制
   why.为了方便存储负指数

在这里插入图片描述
在这里插入图片描述

3.2取

 浮点数从内存中取出,要根据 E 分为三种情况
 
 1.E不全为1或者不全位0
   此时就按照存入的相反操作取出就行
   
 2.E全为1,则此浮点数无穷大

 3.E全为0,则此浮点数无穷小,为0
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值