数据的存储

本文详细介绍了计算机中整数和浮点数的存储方式,包括原码、反码、补码的概念,以及大小端存储模式。强调整数以补码形式存储,并通过实例展示了浮点数在内存中的表示,遵循IEEE754标准,解析了浮点数的符号位、指数位和有效位数字的存储规则。
摘要由CSDN通过智能技术生成

目录

一、预备知识

1、原码、反码与补码

2、大小端介绍

 二、整数在数据中的存储

三、浮点数的存储


一、预备知识

1、原码、反码与补码

有符号数的有三种表示方法,即:原码、反码、补码;这三种表示方法均有符号位与数值位,最高位的那一位就是符号位,用0表示正数,1表示负数。正数的原、反、补码都相同

原码:直接将二进制按正负数的形式翻译成二进制就可以。

补码:将原码的符号位不变,其他位依次按位取反就可以了。

补码:反码+1就是补码

2、大小端介绍

大端模式:数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中。

小端模式:数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中。

打比方:给一个数20,它的16进制是:00 00 00 14,其中14处于低位。

在小端模式上,它是这样存储的:

在大端模式上,它是这样存储的:

 二、整数在数据中的存储

结论:整数是以补码的方式存储在内存中的。

例如:int a=20,它的原、反、补码相同。

则它的补码是:00000000 00000000 00000000 00010100

补码化为16进制:00 00 00 14

int b=-10

它的原码是:10000000 00000000 00000000 00001010

它的反码是:1111111 11111111 11111111 11110101

它的补码是:1111111 1111111 11111111 11110110

补码化为16进制:ff ff ff f6

下面我们从编译器看看数据是否是以补码的方式存储在数据中

 

 有上图可以看出,数据是以补码的方式存储的,并且是小端方式。读者可以用更多的例子去验证,我就不在举例了。

三、浮点数的存储

IEEE 754规定(规定浮点数存储的准则):

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

2、计算机  计算机在保存M时,默认这个数的第一位总是1,因此可以被舍弃,只保存。如保存1.01的时候,只保存01.到读取的时候,再把第一位的1加上去。这样做的原因是为了存储更大的数。以32位浮点数为列,留给M只有23位,将第一位的1舍弃,等于可以保存24位有效数字。

3、规定E是一个无符号整数,但是我们知道,科学计数法中E可以是负数的。所以IEE754规定,存入内存时E的真实值必须加上一个中间数,对于8位的E加上127;对于11位的11,加上1024。比如2^10的E是10,所以保存32位浮点数是,必须保存成10+127=137,即10001001.

下面我们做几个题,来理解这些意思。

1、十进制的浮点数:-5.0

首先我们得先化成二进制,则-101.0,科学计数法:-1.01x2^2,则s=1,M=1.01,E=2

我们把E+127=129,化成二进制,则是1000 0001,M=1.01,在内存中,我们舍弃第一个1,只保存01

所以-5.0在内存中的存储是这样的1 10000001 01000000000000000000000

第一位’1‘是符号位,接下来的8位’10000001‘是指数位,剩下的23位’01000000000000000000000‘

是有效位。

2、十进制数字0.5

首先我们得先化成二进制,则0.1,科学计数法:1.0x2^-1,则s=0,M=1.0,E=-1

我们把E+127=126,化成二进制,则是011111110,M=1.0,在内存中,我们舍弃第一个1,只保存0

所以0.5在内存中的存储是这样的0 011111110 00000000000000000000000

第一位’0‘是符号位,接下来的8位’011111110‘是指数位,剩下的23位’0000000000000000000000‘

是有效位。


下面我们将二进制的浮点数化为十进制

浮点数:1 10000001 01000000000000000000000

由第一位我们知道,这是个负数,接下来的8位10000001,化为十进制129,129-127=2,则指数的数值是2,再通过接下来的23位01000000000000000000000,我们得出M=1.01,所以这个数二进制数是-1.01x2^2,即-101.0

再化成十进制,即-5.0.

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值