C语言—关于整数与浮点数在内存中的存储方式

关于整数存储:

        在计算机中,整数通常以二进制补码的形式存储,而整数的二进制存储会涉及到原码,反码,补码相关的知识。

        原码,反码,补码:

                计算机中的整数有三种2进制表示方法,及原码,反码,补码。这三种表现均有符号位数值位两个部分组成。符号位及二进制数值的最高位,用0表示正,1表示负。而数值位中正数的原码反码补码相同,负数的原码,反码,补码是需要通过计算的。

        在计算机系统中,数值一律用补码的形式来表示和存储。原因在于,使用补码可以将符号位与数值域统一处理,同时加减法也可以统一处理 因为CPU只有加法器,此外补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路.    

        原码:直接通过正负的形式写出的二进制序列

        反码:原码的符号位(最高位)不变,其他位按位进行取反得到反码

        补码:反码加1

        

 从上图示例可以很明显看到 a 的值为1是正数,转换成二进制后的原码反码补码都相同

b的值为-1转换成二进制后为 10000000 00000000 00000000 00000001 因为是负数所以最高位为1,转换成反码则是 符号位不变其他位按位取反,得到11111111 11111111 11111111 11111110 ,将反码加1得到补码11111111 11111111 11111111 11111111

同时可以观察到它们的在内存中是如何存储的

将a转换成16进制为0x00 00 00 01 将b转换成16进制为0xff ff ff ff

从示例中可以看出 a变量并没有如同我们想的一样按照 00 00 00 01的方式存储,而是反过来

01 00 00 00 ,这里就涉及到大小端问题

大小端介绍:

        大端(存储模式):是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址值中

        小端(存储模式):是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址值中

        

        这里vs2022使用的就是小端存储方式

关于浮点数的存储

        浮点数的存储通常遵循IEEE 754标准,这个标准定义了浮点数的表示方法以及各个部分的含义。根据IEEE 754标准任意一个浮点数V可以转换成 V=(-1)^S*M*2^E的形式,(-1)^S表示符号位,当S为0的时候V为正数;S=1 的时候V为负数,M代表有效数字,M大于等于1,小于2。2^E表示指数位

单精度浮点数使用32位(4字节)来表示一个数值,其中各个部分的位数分配如下:

  • 符号位(1位):用来表示数的正负。0表示正数,1表示负数。

  • 指数位(8位):用来表示数的数量级。采用偏移二进制补码表示。这8位指数的实际值是指数加上一个偏移值(127),如果是double类型的就加上1023

  • 尾数位(23位):用来表示浮点数的有效数字部分。尾数位存储的是二进制小数的小数部分,通常被标准化为形如1.xxxxxxx的形式,其中小数点左边的第一个数字总是1,因此不需要存储。

        

        

        这段代码f内存中存放的解析 f=5.5 转换成二进制为 101.1(.1是2的-1次方)

        转换成科学计数法为:1.011*2^2  根据公式 :V=(-1)^S * M * 2^E

        因为是整数所以  S=0 M=011 E=2

        又因为存入e的真实值需要加一个中间值(单精度浮点为8位:127 双精度浮点11位为:1023)

        E=2+127=129 129的二进制为10000001

那么将他们转换成二进制  0 10000001 01100000000000000000000

        转化成16进制为0x 40 b0 00 00  又因为大部分编译器中数据在内存中存放是以小端存储 所以在内存中存放的值为 00 00 b0 40

这就是关于浮点数在内存中存储的方式。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值