C_计算机的信息存储表示, 浮点数double计算机存储

浮点数表示

实数的二进制bit表示

我们这里不考虑 (符号位)!!!, 即仅针对 (正实数)的情况
因为, 正负仅仅是一个符号的问题, 令X>0, 即: X_10进制 = X_2进制, 对应负数的情况: -X_10进制 = -X_2进制

其实很简单, [c, b, a] .(小数点) [x, y, z]
(小数点左侧为: 整数, 则: {a, b, c, ...} 依次为: {2^0, 2^1, 2^2, 2^3, ...} (等比递增))
(小数点右侧为: 小数, 则: {x, y, z, ...} 依次为: {2^-1, 2^-2, 2^-3, ...} (等比递减))

比如, 二进制为: 1011.1011, 他的十进制为: x.y

  • 看整数部分: 1011 = 1 + 2 + 0 + 8 = 11 (看二进制从右往左, 得到的十进制是从小到大), 即x = 11
  • 看小数部分: 1011 = 1/2 + 0 + 1/8 + 1/16 (看二进制从左往右, 得到的十进制是从大到小), 即y = 11 / 16 = 0.6875

故, 1011.1011 <=> 11.6875


对于: 11.6875, 他的二进制表示是什么呢? 要怎么求呢?
(注意, 我们这里说的是: 二进制表示, 而非 计算机里的bit位排布)
(因为, 二进制表示 != bit位; 比如-11, 他的二进制表示为: -1011, 而他的bit位 却不是-1011)

  • 该数包括 (整数11) 和 (小数0.6875), 即 (十进制整数 -> 二进制) 和 (十进制小数 -> 二进制)

十进制整数 -> 二进制

我们这里不考虑 (符号位)!!!, 即仅针对 (正整数)的情况
因为, 正负仅仅是一个符号的问题, 令X>0, 即: X_10进制 = X_2进制, 对应负数的情况: -X_10进制 = -X_2进制
即, 比如 11 = 1011, 则: -11 = -1011

方法为: (模2) -> (除2 下取整), 不断重复该过程

x = 11

0. 11 % 2 = 1   ' 得到的1, 为(最低位)的bit ' 
   11 / 2 = 5   ' 把11 更新为 5 '

1. 5 % 2 = 1
   5 / 2 = 2	' 把5 更新为 2 ' 
  
2. 2 % 2 = 0
   2 / 2 = 1  	' 把2 更新为 1 '

3. 1 % 2 = 1
   1 / 2 = 0  	' 把1 更新为 0 '

直到, 该数 变成 0; 依次得到的结果是: 1 1 0 1 (顺序为: [低位 -> 高位]
你需要将他(反过来), 即1 0 1 1是 11的二进制

即, 不断重复: (%2获得结果 -> /2更新), 直到变成0; 最后将得到的结果, (逆序)

十进制小数 -> 二进制

我们这里不考虑 (符号位)!!!, 即仅针对 (正小数)的情况; 这里的小数, 是:0.xxx (即是个<1的小数)
因为, 正负仅仅是一个符号的问题, 令X>0, 即: X_10进制 = X_2进制, 对应负数的情况: -X_10进制 = -X_2进制
即, 比如 0.6875 = 1011, 则: -0.6875 = -1011

方法为: (*2 -> 拿掉整数部分)

11 = 0.6875

0. 0.6875 * 2 = 1.375
   拿掉(整数部分): 1.375 -> 0.375, 得到: 1

1. 0.375 * 2 = 0.75
   拿掉(整数部分): 0.75 -> 0.75, 得到: 0

2. 0.75 * 2 = 1.5
   拿掉(整数部分): 
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值