整数和浮点数的存储

整数存储

整数在内存中是以二进制序列直接进行存储的,而对于有符号和无符号的整数的存储方式是不同的。

无符号整数

这里比较简单,就是将整数直接转化为二进制序列,32位机器是32个二进制数,64位机器是64个二进制数,这个转化使用除2取余法可以轻松做到。

例:465存储在32位机器的内存中是00000000 00000000 00000001 11010001

有符号整数

有符号的整数自然要留出符号的位置,在每个二进制序列的第一位为符号位。

这里引入原码 反码 补码的名称,用来描述负整数的存储。

原码:是整数直接转化为的二进制序列。

反码: 符号位不变,之后是原码中的数字0变为1,1变为0后得到的二进制序列。

补码:是反码的二进制序列加1,是计算机真正在内存中存储的二进制序列。

           正整数的原反补码都相同。  负整数需要进行变换。这里的负号用1来表示。

例:-465的原码为 10000000 00000000 00000001 11010001

反码为 11111111 11111111 11111110 00101110

补码为 11111111 11111111 11111110 00101111

浮点数存储

浮点数在内存中根据IEEE754标准进行存储,形式为:(-1)^ s * M * 2^E,是先转化为二进制序列,再经过变换存储。

在这里s为0或1,用来存储正负号,M是一个属于大于等于1而小于2的数,2^E就是相当于十进制中的10^E,是二进制的科学计数法。

例:5.5 -》101.1-》(-1)^ 0 * 1.011 * 2^2

在不同位数的机器中,浮点数的存储略有差别,

32位中1位是符号位存s,接下来的8位是存(E+127)的值,余下的位存M(在存时将1去掉,仅留下小数点后的数字,能多存一位,取时将1加上。)

64位机器中1位为符号位存s,接下来的11位存(E+1023)的值,余下的位存M(依旧是存时将1去掉,仅留下小数点后的数字,能多存一位,取时将1加上。)

注意

为了存储更加精准,E的存储分情况。

1 E全为零时,相当于2^-127,此时取出这个浮点数不会加上1直接为0. ……,

2 E全为1且M全为0时,相当于2^128,如果s为0,那么这个数表示无穷大,如果s为1,则表示负无穷大,E全为1且M不全为0是,表示某些无效的数,返回NaN为结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值