理解二进制小数定义与转换方法推导

说起二进制小数,上学时很多教学都是直接填鸭式地说明计算方法,但我较笨总是理解上有些困惑,不太知其所以然。后来工作中用到时想明白了数学逻辑,顺便记录一下。


常规算法

十进制转二进制

整数部分直接转换,小数部分就是不断地乘以2,取整数部分作为当前位,小数部分继续乘以2,循环x位或到小数部分为0。

例子:

十进制:3.25

二进制:11.01

整数:3=11

小数:01

​ 第一位:0.25*2=0.5, 取0

​ 第二位:0.5*2=1,取1,终止

二进制转十进制

小数位由高到低,依次乘以2^-n, n=1,2,3…,类同整数位

例子:

二进制:11.01

1 ⋅ 2 1 + 1 ⋅ 2 0 . 0 ⋅ 2 − 1 + 1 ⋅ 2 − 2 1\cdot 2^1 + 1\cdot 2^0 . 0\cdot 2^{-1} + 1\cdot2^{-2} 1⋅21+1⋅20.0⋅2−1+1⋅2−2

2 + 1.0 ⋅ ( 0.5 ) + 1 ⋅ ( 0.25 ) 2+1.0\cdot (0.5) + 1\cdot (0.25) 2+1.0⋅(0.5)+1⋅(0.25)

3.25 3.25 3.25

定义理解

同时看这两部分,不知怎么我很容易联想到泰勒展开,然后就理解了。

具体说,

  • 小数,就是一个不足1的数字

  • 而数字1,可以无限的除以2细分,把每一部分求和后无限接近于1,即 ∑ 0 ∞ ( 1 2 , 1 4 , 1 8 ⋯ 1 n ) = 1 \sum_{0}^{\infty } (\frac{1}{2},\frac{1}{4},\frac{1}{8}\cdots \frac{1}{n}) = 1 ∑0∞​(21​,41​,81​⋯n1​)=1

结合十进制和二进制相互转化的算法,一下子就十分形象。

例:

有一个十进制的小数0.6875

只用从所有 2 − n 2^{-n} 2−n的集合中选择一些项目,$\left { \frac{1}{2^1} ,\frac{1}{2^2}, \cdots ,\frac{1}{2^n} \right } $ ,加起来组合这个小数

那么即 1个0.5,0个0.25,1个0.125,1个0.0625, 0.6875 = 0.5 + 0 + 0.125 + 0.0625 0.6875=0.5+0+0.125+0.0625 0.6875=0.5+0+0.125+0.0625

同时,这也解释了为什么某些数会有循环不收敛,因为选项有限,每个 2 − 2 2^{-2} 2−2只能1个或0个,所以只能接近,不能相等

这里就很好理解转换算法了

转换算法理解

十进制转二进制

十进制转2进制时乘以2,是为了确认当前余数是否够1个 2 − n 2^{-n} 2−n

还是例子0.6875,设余数部分为A

  • 第一步,要判断是否要拿1个0.5,所以 0.6875 × 2 = 1.357 ≥ 1 0.6875\times 2=1.357\ge1 0.6875×2=1.357≥1,那么第一位取1,即取1个0.5

    比较 A × 2 ≥ 1 A \times 2 \ge 1 A×2≥1 就是比较 A ≥ 0.5 A \ge 0.5 A≥0.5 ?,两边同时除以2

  • 第二步,余数 0.375 × 2 = 0.75 ≤ 1 0.375\times 2=0.75\le 1 0.375×2=0.75≤1,即再加一个0.25就超过目标了,所以第二位取0,即取0个0.25

    余数更新为 B B B, B = ( A − 0.5 ) × 2 B=(A-0.5)\times 2 B=(A−0.5)×2,需要判断小数减去1个0.5后的剩余部分是否超过1个0.25的大小,

    即 ( A − 0.5 ) ≥ 0.25 (A-0.5) \ge 0.25 (A−0.5)≥0.25?,两边同时乘以4,然后代入当前余数B, ( ( A − 0.5 ) × 2 ) × 2 ≥ 1 ) ((A-0.5) \times 2) \times 2 \ge 1) ((A−0.5)×2)×2≥1),即 B × 2 ≥ 1 B \times 2 \ge 1 B×2≥1

  • 第三步,余数 0.75 × 2 = 1.5 ≥ 1 0.75 \times 2 = 1.5 \ge 1 0.75×2=1.5≥1,即再加一个0.125不会超过目标,所以第三位取1,即取1个0.125

  • 第四步,余数 0.5 × 2 = 1 0.5\times 2= 1 0.5×2=1 ,即在加一个0.0625就刚好满足目标,所以第四位取1,即取1个0.0625,然后循环终止

二进制转十进制

二进制转十进制就是简单的组合

二进制小数 0. b 0 b 1 b 2 ⋯ b n − 1 0.b_0b_1b_2\cdots b_{n-1} 0.b0​b1​b2​⋯bn−1​ 转10进制

b 0 ⋅ 2 − 1 + b 1 ⋅ 2 − 2 + b 2 ⋅ 2 − 3 ⋯ + b n − 1 ⋅ 2 − n b_0\cdot 2^{-1}+b_1\cdot 2^{-2}+b_2\cdot 2^{-3} \cdots + b_{n-1} \cdot 2^{-n} b0​⋅2−1+b1​⋅2−2+b2​⋅2−3⋯+bn−1​⋅2−n

理解二进制小数定义与转换方法推导相关推荐

  1. 深入理解OpenGL之投影矩阵推导

    深入理解OpenGL之投影矩阵推导 OpenGL流水线中的投影矩阵以及坐标变换 OpenGL中,投影矩阵在Vertex shader中使用,用于变换顶点.一般和Model, View矩阵结合成MVP矩 ...

  2. 城市大脑全球标准研究2:如何理解和定义城市大脑?

    作者:刘锋 城市大脑作为一个新生事物,如何理解和定义反映了人们对这个新事物的理解程度,同时由于城市大脑是一个复杂的智能巨系统,如何理解和定义它对于后续的建设和发展也将产生重大和深远的影响.目前对城市大 ...

  3. 【压缩感知合集7】压缩感知RIP有限等距性:定义解析,理解说明,数学原理推导

    0 前情提要 0.1 数学模型和总体框图如下 给定输入信号X∈RN×1\boldsymbol{X} \in \mathbb{R}^{N\times1}X∈RN×1,最终想要得到压缩信号A∈RM×1\b ...

  4. 起源,机制与趋势,如何理解和定义城市大脑

    前言:本文从城市大脑的起源背景,技术支撑,建设重点,服务对象和发展目标等多个角度,对城市大脑如何定义进行了分析和解读,提出: 城市大脑是互联网大脑架构与智慧城市建设结合的产物,是城市级的类脑复杂智能巨 ...

  5. python怎么定义一个变量为空列表_python – 为什么一个类变量没有在列表理解中定义,但另一个是?...

    数据是列表理解的根源;它是传递给已创建的嵌套作用域的一个参数. 列表解析中的所有内容都在单独的范围内运行(作为一个函数,基本上),除了用于最左边for循环的iterable之外.你可以在字节码中看到这 ...

  6. 全面理解Gradle - 定义Task

    系列文章回顾 Gradle从入门到实战 - Groovy基础 全面理解Gradle - 执行时序 之前我们讲述了Groovy的语法,还讲述了Gradle的执行时序,本篇文章讲述下Task的定义. Ta ...

  7. 概率密度变换公式 雅可比矩阵_雅可比行列式【1】定义及一些推导

    最近在做应用多元统计的学习的时候再一次遇到了雅可比矩阵这个东西,发现完全想不起来这是什么东西,只记得学习高代和概率论的时候背过这个公式.学数学分析的时候也没有好好学习向量微积分的知识.今天跑步的时候想 ...

  8. vue组件化的理解与定义

    1. 对组件的理解 a) UI组件 项目各个页面中,会产生很多重复的功能,比如弹出层提示框,像这种纯粹非业务的UI,便成了我们所谓的UI组件,最初的前端组件也就仅仅指的是UI组件. b) 业务组件 而 ...

  9. 如何理解和定义城市大脑

    前言:本文从城市大脑的起源背景.技术支撑.建设重点.服务对象和发展目标等多个角度,对城市大脑如何定义进行了分析和解读,提出: 城市大脑是互联网大脑架构与智慧城市建设结合的产物,是城市级的类脑复杂智能巨 ...

最新文章

  1. struts2的执行过程
  2. v-if 和 v-else-if 和v-else的使用
  3. c语言影碟出租程序设计总结,vc++影碟出租系统的设计与开发
  4. Docker 容器CPU设置
  5. java lambda表达式详解_Lambda表达式详解
  6. 点云平面提取_基于LiDAR点云数据滤波方法
  7. python docx表格宽度_RPA手把手——python-docx 设置 word 文档中表格格式
  8. 全国计算机vfp是什么,vfp是什么-你知VFP是什么东西吗?它是我们大学生必须上的计算机的一个章节的 爱问知识人...
  9. R pdf大小_PDF如何压缩?这两招教您快速压缩PDF!
  10. NJUPT【电工电子基础实验】
  11. 通过QQ 2012 客户端协议获取clientkey的0x91数据包分析
  12. SQL中对一张表同时升序和降序的排序要求
  13. 如何下载VMWare虚拟机如何安装VMWare详细教程
  14. 1-8代酷睿全部中招,英特尔处理器再曝漏洞
  15. 小兔子乖乖用计算机,宝贝宝贝歌词说说:两只老虎爱跳舞,小兔子乖乖拔萝卜...
  16. (转)一些个人感悟(2008)
  17. Preparatory Class-Day8------函数
  18. 微信应用号(小程序)开发IDE配置
  19. ClickHouse MergeTree副本表和分布式表(切片)
  20. 计算机小键盘如何启用,教你电脑开机时小键盘自动启用方法

热门文章

  1. 毫米波雷达传感技术方案,爱希ISEE人体感应器,智能感应人体存在控制应用
  2. 【Python】数据分析优秀案例项目经历-从多个角度分析CDNow用户特征并提供处理方案
  3. RK3399使用微雪电子ST7735显示屏
  4. 西南大学计算机专硕907,西南大学907电子信息
  5. “下一个江小白”靠什么成就?
  6. linux移植嵌入式系统,嵌入式系统学习——S3C2451之Linux移植步骤
  7. Vue生命周期,Vue中在哪个生命周期阶段调用异步请求最佳
  8. java调用cmd命令执行mysql命令
  9. PW4056H充电芯片,1A可调充电
  10. 台式电脑CPU散热器怎么选?