整数和浮点数在内存中存储的方式

1.整数的存储:

整数通常使用二进制补码形式存储。

对于正数,其 原码 反码 补码 一致;

对于负数,其补码是其的二进制取反后加1。

原反补码

  • 原码:二进制表示,其中负数会将二进制最高位作为符号位改为1(表示负数)。
  • 反码:在原码所有位取反 0->1 , 1->0  。
  • 补码:在反码上,加1。

(补码的设计简化了计算机的加法运算,并使得符号位能够参与数值的计算,从而提高了计算机的运算效率和灵活性)。

例如

1. 正数5的二进制表示为 00000101原码,反码,补码一致,这就是它在内存中的存储形式。

2-5的二进制表示为 10000101,取反,符号位不变,其他取反,后得到 11111010,再加1得到 11111011,这就是-5在内存中的存储形式。

  • 原码 1000 0101
  • 反码 1111 1010
  • 补码 1111 1011 

整数的大小和范围取决于分配给它们的位数。例如,一个8位整数可以表示的范围是-128到127,而一个32位整数可以表示的范围则要大得多。


2.浮点数的存储:

浮点数在内存中通常使用IEEE 754标准来存储。这个标准定义了浮点数的格式:包括符号位、指数和尾数(或称为有效数字)

IEEE 754标准下的浮点数通常由三个部分组成:

  • 符号位:表示浮点数的正负。
  • 指数位:用于表示浮点数的指数部分,通常是偏移形式,这样指数可以是正数或负数。
  • 尾数位:表示浮点数的有效数字或尾数。
  • 例如,一个单精度浮点数(float)通常占用32位,其中1位用于符号,8位用于指数,23位用于尾数。而双精度浮点数(double)则占用64位,其中1位用于符号,11位用于指数,52位用于尾数。

以 3.5 作为例子:

3.5 二进制是 11.1 (因为 0.5=2 的 -1次方)

将他变成科学计数法表示:  (-1)^0 × 1.11 × 2^1    

解释上式:
  •             -1的0次方表示正负
  •              2的一次方由11.1小数点左移一位得到

分成三个部分:1. 符号位S(占1个字节)--- 0

                       2.指数位E(占8个字节)---- 1

                       3.尾数位M(占23个字节)---- 1.11

在内存中存储时:1.指数位需要加上127,等于1+127=128转化为二进制位10000000

                          2.尾数位只存小数点后面的位,就是.11然后剩下的位补0

所以3.5在内存中存储是如图

为                      0100 0000 0110 0000 0000

转换为16进制是   40 60 00 00

我们在 VS 里面调试看一下是否正确

因为是小端存放,所以是倒数

通过这种存储方式,计算机能够精确地表示和运算浮点数,尽管由于精度限制和舍入误差,有时可能会产生一些微小的偏差。

浮点数在科学计算、金融建模、图形处理等领域中广泛应用,因为它们能够表示更大范围的数值,并且具有一定的精度。然而,在进行浮点数运算时,需要注意精度损失和舍入错误的问题。


3.什么是小端,什么是大端

大端字节存储:

把一个数据的低字节的内容储存在高地址处,把高位字节的内容存储到低地址处。

特点大端模式在人类阅读数字时比较直观,因为数字的左边是最高位,右边是最低位,这与人们从左到右的阅读习惯相符。

小端字节存储:

把一个数据的低字节的内容储存在低地址处,把高位字节的内容存储到高地址处。

特点小端模式在某些情况下可以简化硬件设计,因为当数值逐渐增大时,地址也递增,这使得计算机的内部操作更加简单。然而,对于人类来说,这种存储方式可能不那么直观。

这期介绍就到这里!可以点点赞关注,你们的支持是我继续的动力!

个人主页点这里~

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路过的墙颈鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值