http://zhidao.baidu.com/question/50153360.html
比如说5.6
整数部分5用2进制为101
小数部分0.6
有这样一个公式: *2 如果<1就为0,基数=基数;大于1,就为1,基数=基数-1
0.6*2=1.2>0 那么就为1 基数=1.2-1=0.2
0.2*2=0.4<0 那么就为0,基数=0.4
0.4*2=0.8<0,那么就为0,基数=0.8
0.8*2=1.6>0 那么就为1,基数为1.6-1=0.6
:
:
:
:
所以5.6可以表示为:101.1001
想往下面再乘,就更精确了
 
http://squall.cs.ntou.edu.tw/cprog/Materials/FractionalNumber.html

二進位的小數表示法

小數

二進位的小數和十進位的小數在觀念上完全一樣,必須有一個小數點, 小數點的左邊是整數, 小數點的右邊是小數,每一位數有它的權重,例如下圖: 

 

在電腦裡表達小數的方式有兩種,一種是定點表示法,一種是浮點表示法。 

定點小數表示法:(fixed point)

在電腦裡資料以位元來存放,而小數點並不需要真的存放在位元內,我們只要知道哪兩個位元之間是小數點就好了,或是說我們只要知道每一個位元的權重,例如上圖即可。 
  1. 一般來講使用定點表示法來表達小數時我們在整個系統中會將小數點都固定在一個地方,而不會調來調去,否則就需要多幾個位元來記錄小數點的位置了。當然這也是為什麼要叫做定點小數的原因了。
  2. 在定點小數表示法裡加減法就是二進位的標準加減法,而乘法必須要把小數點移回來 (你可以用十進位小數乘法去思考)。
  3. 在高階程式語言內一般都不用定點小數表示法,因為定點小數表示法所能表示數字的範圍非常有限,例如上面雙位元組小數點置於第 8 位和第 9 位元之間時,只能表示 0 到 255 之間每隔 1/256 的那些數字而已,這樣子範圍的數字在自然界中應用的機會較小,那為什麼要用這種方式表示小數呢?? 簡單地說就是運算速度較快,定點小數的運算就是標準二進位的運算,因此很簡單,硬體製作起來也很便宜,浮點小數就比較複雜,軟體模擬比較慢,硬體也比較貴。
  4. 自然界中隨便一個數字,例如十進位 0.1 這個數字當使用二進位定點表示法時,可能會有誤差,原因是是十進位 0.1 這個數字用二進位表示時會是 0.000110011001100110011... 的一個循環小數,以上圖的表示法來說小數以下只能表示八位數,也就是 0.00011001,這個數字和原來希望表示的數字會有一點點的誤差,讓我們把這個數字換回十進位來看看:也就是 1/256 + 1/32 + 1/16 = 25/256 = 0.09765625,是蠻接近 0.1 的,不是嗎,誤差一定小於 1/256,而且有一個特性就是實際表達出來的數字的絕對值永遠小於或是等於原來要表達的數字的絕對值。

浮點小數表示法:

所謂二進位的浮點小數表示法 (或是浮點數, floating point number) 簡單地講和我們十進位中常用的科學記號表示法是類似的,十進位中我們用十的冪次 (power) 及 0 至 1 之間的小數來表示一個任意的實數,例如:12345.6789 表示為 0.123456789 * 10^5。 

在二進位中我們一樣可以將一個二進位數字 1101110.11011 表示為 0.110111011011 * 2^7,這樣子的表示法和定點表示法之間好像沒有什麼不同嘛!! 對!! 這兩個數值的大小當然是完全一樣的,那為什麼要用浮點表示法呢?? 請注意在定點小數表示法之中我們看到它的缺點是絕對值太大的數字會被截斷 (正確的名稱是溢位,overflow) 位數不夠多無法表達大於範圍的數字, 絕對值太小的數 (例如:0.000000001) 也會被截斷 (正確的名稱是無條件捨去,truncation) 只能表達近似的值。 如果是這樣子的話,不知道你有沒有想過... 
  1. 對於一個很大的數字 (例如 123456789012) 定點表示法保証小數點以後一定有固定的幾個位數來表示, (例如 123456789012.00000011) 可是這樣子的精確度對於大部份的應用來說是沒什麼意義的,試想太陽到地球的距離多一公里少一公里真的有關係嗎?? 光速每秒鐘快一公尺又何妨??
  2. 對於一個很小的數字 (例如 0.0000000012) 來說定點表示法可能因為小數點後沒有足夠的位數來記錄而將其省略,上面這個數字就變成 0 了。如果你說水中含有 0.0000000012 莫耳的氰化鈉,因為小數點後位數不足而把它當為 0,這不太好吧!!

這時浮點數表示法就有它的妙用了,以第一例中一個很大的數字而言:浮點數由最重要的位數開始只保留一定的位數,例如 123456789012.00000011 可用 .1234567890 * 10^12 來表示就夠了,這個表達方法所記錄的數字和實際的數字會有誤差,但是百分比誤差不大。以第二例而言: 0.0000000012 可用 0.12 * 10^(-8) 來表示,不需要浪費許多位元記錄 "0",只需記 12 以及 -8 即可精確地表達這個很小的數字。 舉例來說,一種簡單的二進位浮點表示法可以一個位元記錄正負號,七個位元二的補數記錄 2 的冪次, 24 個位元記錄小數,共 32 位元,如下圖: 

若有一個以此種表示方法的二進位數值: 
  • 0 0001110 110000000000000000000000
代表十進位的 0.75 * 2^14 這個數字。 

注意: 
  • 和前面的定點小數表示法一樣,浮點小數表示法在表達任意一個小數的時候,也常常會有一些誤差,而且實際所表示的數字的絕對值會小於或是等於原來希望表達的那個數字的絕對值。
												

如何用二进制表示一个小数相关推荐

  1. 如何用FFmpeg编写一个简单播放器详细步骤介绍

    如何用FFmpeg编写一个简单播放器详细步骤介绍(转载) FFMPEG是一个很好的库,可以用来创建视频应用或者生成特定的工具.FFMPEG几乎为你把所有的繁重工作都做了,比如解码.编码.复用和解复用. ...

  2. Java double 保留一个小数、理解BigDecimal、Java解决精度问题

    Java double 保留一个小数 两种方法 @Testpublic void test2() {double f = 234.353333000000000000000000;BigDecimal ...

  3. html转成16进制数,16进制转换(十六进制,二进制(包含小数)相互转换)

    十六进制和二进制互相转换 前面说了[二进制,十进制(包含小数)相互转换][十六进制,十进制(包含小数)相互转换] 十六进制和二进制互相转换,主要还是看他们的对应关系.基本上所有的换算都要用到他们的对应 ...

  4. 如何用java编写一个简单的多人PK游戏

    如何用java编写一个简单的多人PK游戏 类与对象---PK游戏的编写 素材取用----王者荣耀和BILIBILI 创建两个对战的角色(PK游戏最少需要两名角色) 创建孙尚香和Van 设置孙尚香和Va ...

  5. 如何用OKR搞垮一个团队?

    作者| Mr.K   整理| Emma 来源| 技术领导力(ID:jishulingdaoli) 这几天一大堆读者在后台留言催更: "老K又偷懒了,看了这么多天恰饭文,我都忍了!再不写干货, ...

  6. 如何用 css 画一个心形

    如何用 css 画一个心形 (How to draw hearts using CSS) 用两个长方形切圆角倾斜位移并合并为一个心形 第一步 画一个长方形 (Draw a rectangle) 这个长 ...

  7. 怎么用python制作简单的程序-神级程序员教你如何用python制作一个牛逼的外挂!...

    玩过电脑游戏的同学对于外挂肯定不陌生,但是你在用外挂的时候有没有想过如何做一个外挂呢?(当然用外挂不是那么道义哈,呵呵),那我们就来看一下如何用python来制作一个外挂.... 我打开了4399小游 ...

  8. 手把手教你如何用Python制作一个电子相册?末附python教程

    这里简单介绍一下python制作电子相册的过程,主要用到tkinter和pillow这2个库,tkinter用于窗口显示照片,pillow用来处理照片,照片切换分为2种方式,一种是自动切换(每隔5秒) ...

  9. js打乱数组的顺序_如何用 js 实现一个类似微信红包的随机算法

    如何用 js 实现一个类似微信红包的随机算法 js, 微信红包, 随机算法 "use strict"; /** * * @author xgqfrms * @license MIT ...

最新文章

  1. 1049. 数列的片段和
  2. sprite的大小 unity_[Unity]SpriteShape与atlas的小坑
  3. linux中特殊字符反引号,linux中的特殊符号$ ‘’ 反引号 反斜杠
  4. SAP License:MES与ERP系统如何分工合作
  5. yolov4网络结构_上达最高精度,下到最快速度,Scaled-YOLOv4:模型缩放显神威
  6. [Python] 使用 UN Comtrade API 高效获取数据
  7. 【丐中丐】废旧光驱改装激光雕刻机
  8. VMware虚拟机中Ubuntu16.04系统下通过MVS运行海康威视工业相机
  9. Nodejs 中文分词
  10. 计算机应用bsp什么意思,bsp文件是什么?bsp文件怎么打开?
  11. c++ 的interface
  12. 缺少所需的CD/DVD驱动器设备驱动程序
  13. hr标签---中心线:设置颜色
  14. 跳过基于AMD平台安装ESXI 6.7,并部署win10和黑群辉虚拟机的坑
  15. think服务器换系统,ThinkServer TD340服务器安装操作系统[转]
  16. Flutter 自定义组件实战
  17. 邮政平邮批量查询未签收物流的方法
  18. 粘贴板管理 android,安卓剪贴板管理(Clipper Plus)
  19. r语言归一化_生物信息学之RMA(Robust Multi-Array Average)算法的归一化和最终计算过程...
  20. Android 仿微信添加群聊界面——addView

热门文章

  1. 【数据结构与算法】之深入解析“零钱兑换”的求解思路与算法示例
  2. App设计灵感之十二组精美的天气预报App设计案例
  3. 81. 搜索旋转排序数组 II
  4. 1.Vue 安装与简单使用
  5. 并发编程——进程——理论知识
  6. 【Linux驱动】字符设备驱动
  7. html文件语言表示网页标题,HTML网页基本结构(HTML文件、编程语言)——十一号笔记...
  8. java异常处理试题答案_JAVA异常处理试题及答案
  9. c++向量和数组的区别_向量,矩阵和张量的导数 | 简单的数学
  10. 网站接入QQ登录最新2020 java版本