当前课程知识点:计算思维导论 > 第三单元 > 3.5 二进制之优越性及问题与代价 > Video
大家好
现实生活中
人们往往习惯使用十进制
只有在钟表 时间等方面
采用别的进制
如十二进制
二十四进制
六十进制等等
当然了
老祖宗们也用过十六进制
所以呢
才有半斤八两的说法
但是电子计算机
采用的却是二进制
并不是大家所熟知的十进制
或者说上述的这些进制
这就是前面所介绍的
弃十选二的无奈之举
但事物总是一分为二的
二进制有它的不足
也有它的好处
本节呢一起来探讨
二进制的优越性
及其存在的问题与代价
以便大家更全面
更深入地理解它
一 二进制(数)的优越性
二进制到底有哪些优越性呢
我们一起来看一看
首先
客观世界
总是呈现了很强的二值特性
比如
黑夜与白天
男与女
开与关
高与矮
导通与截止
左和右
上与下
有和无
重和轻
磁性的南北极
等等等等
特别是
在客观世界中
我们需要判断
对还是错
是还是否
成立还是不成立
真还是假
这样的一些逻辑值
而这些呢
都与二进制数1和0
有很好的对应 统一的关系
二 晶体三极管的
导通与截止状态
也就是门电路的高低电平
能很好去地表示二进制值1和0
科学家们发明的
这种晶体三极管
它除了
能很好地表示1和0之外
还具有抗干扰能力很强
状态很容易转换
以及转换速度非常快
体积很小 功耗很小
价格还很低廉这样的一些特点
第三 二进制的运算规则很简单
很容易机器实现
就加法运算而言
就四条规则
如
0加0等于0
1加0等于1
0加1加1
1加1等于10
这个1就是一个
逢二进一的一个进位
乘法运算也只有4条运算规则
如
0乘0等于0
1乘0等于0
0乘1等于0
1乘1等于1
二进制数据在逻辑运算方面
也是很方便的
我们知道
逻辑运算有
与 and
或 or
非 not
三种
对应的运算规则如图所示
那我们看到
与运算当中
只要参与的两者之间同时为1
结果就为1了
或运算
只要参与运算的数当中
有一个为1
结果就是1
而非运算其实就是取反
参与的运算是0
结果就是1
参与的运算是1
结果就是0
这里的两者
指的是参与运算的数
或者是你输入的这些数
我们不妨来看一个动画
这个动画有三个士兵
看看这里来了三个士兵
你们两个负责信号输入
就叫入1 入2 吧
你 负责信号输出
就叫出吧
这样站成一个三角形
出是顶端
入1和入2是底边
现在我这里有六面小旗
三白三黑
你们三名士兵呢
每人一白一黑
白色代表0 黑色代表1
好
现在听我说
出
你转身看着入1和入2
如果他们都举黑旗
你就举黑旗
其他的情况你都举白旗
这种情况有三种
入1白 入2黑
入1黑 入2白
入1 入2都是白
这三个人就组成了
一个计算系统的部件
是门部件的一种
叫做与门
好的 立正
我们构建下一个部件
你
出
只要看到入1和入2中
有一个人举黑旗
你就举黑旗
这种情况有三种组合
黑黑 白黑 黑白
剩下的一种情况
白白
你就举白旗
明白了吗
好好干
下面开始
好的
举
再举
再举
好极了
非常正常
这个门部件叫或门
下面我们用两名士兵构建非门
入
你和出总是举颜色相反的旗子
记住这个规则
就可以了
看到了吧
士兵们只要听从规则
就能很轻松地实现
与门 或门和非门
而且它们并不需要
练就更多的武艺
千千万万
基本的逻辑门团结在一起
就构成计算机的大脑—CPU了
第四 数据存储也很容易
交给计算机处理的数据
及其计算机处理的结果
多半是要永久地保存起来的
采用二进制形式记录数据
物理上比较容易实现
比如
对于只写一次的光盘
将激光束聚集成
1~2um的小光束
融化盘片表面上的合金薄膜
在薄膜上形成小的凹坑
就记录下了1
而原来的位置就是0
磁盘 硬盘
则是通过磁极的取向
南极 北极来记录数据的
五 可靠性高
二进制中
只使用0和1两个数字
传输和处理时呢
出错率就会比较低
这也是保障计算机
以及计算机与计算机
通信时可靠性的最有效
最基本的方法
六 二进制数还有一些有趣的特性
比方说
最低位是1就是奇数
是0就是偶数
再比如
如果第n位为1
其余位为0
那么这个数等于2的n次方
如1000
这个数就是8
还有
如果第n位都是0
则该数可被2n整除
如11000可以被6整除
不妨验证一下
2的4次方加上2的3次方
是24
24确实可以被6整除
此外
无符号二进制数所有位左移1位
相当于该数乘以2
如101101
它是45
转换成十进制是45
那么左移一位变成了1011010
刚好是90
无符号二进制数右移1位
相当于该数除以2
如10111
我们右移之后呢变成了1011
那么验证一下
是由原来的23变成了11
类似这样的特性还有很多
大家可以去总结
这让我突然想起
德国著名的郭塔王宫图书馆
保存的一份珍贵的手稿
天才大师
数学家莱布尼茨在开篇写道
1与0
一切数字的神奇渊源
或许正是如此
1与0
一切数字的神奇渊源
也自然而然地成就了
数字电子计算机的神奇渊源
二 鸿沟与代价
那么我们刚刚说了很多
二进制的优越性
一切是不是就很完美了呢
不是
我们接下来谈一谈
采用二进制之后
带来的鸿沟与代价
一 效率问题
数制间转换的代价之一
正是由于计算机只会二进制
人只会十进制
如果各讲各的语言
鸡同鸭讲
相互间肯定没有办法交流
要解决交流问题
进制间的相互转换
这对计算机而言是必不可少的
当然
不管是手工转换
还是机器自动转换也罢
既然这个过程不能少
那么肯定会消耗资源
至少要付出时间上的代价
而时间
往往是计算机最宝贵的资源
第二 有损映射
这是数制间转换的代价之二
语言不通时
人们往往想着找一个翻译
如果翻译的水平很高
翻译的内容也准确
对话自然没有任何问题
但是
谁能确保翻译一点问题也没有呢
万一翻译错了
或者是理解不到位
情况就比较糟糕
比如我看到有一个新闻说
去火车站买票的时候
黄线指示说请在一米线外等候
Please wait behind the yellow line
然而被翻译成什么呢
Please waite outside a noodle
请在一条米线外等候
类似这样的很多
这个也就是有一点搞笑
但是并不是太大问题
如果恰恰是
双方高度敏感的政治问题
那可能就会后果很严重
可见
中间的翻译是很重要的
那么人与机器之间的翻译
到底怎么样呢
我们也来看一段
小的C语言的程序
这段代码很小很简单
那么大家看到
这里面有一个单精度的f变量
它赋值了一个语句进去
是1234.567
理论上呢
赋值的语句直接输出来
应该是进去的是什么
出来的就是什么
可是运行的结果却是
1234.567017
这个017
这个尾巴哪来的呢
为什么输出变量的值
和原本给变量
赋的初值不一样呢
多出来的尾巴是怎么回事
这对于初学者来说
确实是一个令人困惑的问题
要弄清楚这样的问题
我们必须从
十进制与二进制的转换入手
我们来看
1234.567的整数部分
按照除2取余倒排的这个规则
1234的这个十进制数
1234转换成二进制应该是
10011010010
再来看一下1234.567的小数部分
也就是0.567
按照乘2取整顺排的这样的规则
我们可以得到
0.567的十进制
转换出来时10010001001
等等等等
为什么我这里会打一个省略号呢
这是一个无限循环的过程
因此
我们只能在
满足特定的精度的前提下
取其若干位有效数字
把后面的尾巴截掉后
那么得到一个近似值
所以最终
这个结果就是这样的
接着
把上述二进制数转换成十进制数
结果约是1234.567017
但是它回不到1234.567了
这个就好像我们在数学上
用1除以3约等于0.333333
那么0.33333
这样的无限循环数乘以3
它也是永远回不到1的
大家可以去上机验证一下
可见
在计算机这一特定的环境中
不能像数学一样
可以获得一个无限循环的值
只能在设定精度的前提下
取一个与其近似的二进制值
因而
这种转换有时候是有损的
这就是我们必须了解
并引起重视的一个问题
三 从连续到离散
从离散到连续
又一种转换的代价
我们已经明白
今天使用的计算机
它是属于电子数字计算机
那么客观世界当中
那些连续变化的量
比如说湿度
温度是怎么处理的呢
这一些连续的量和离散值对应
我们将其称为模拟量
比如平时我们发出的 啊
这样的一个声音
其实是空气的振动
称为声波
引起了耳鼓膜的振动
这个振动产生的信号
传到大脑里面
我们就说听到了这个声音
声音的强弱取决于声波的振幅
而声音的高低就与这个频率有关
振幅和频率
它在描述声音的时候都是连续的
是一个模拟量
用计算机来存放和处理的时候
我们就要把这个模拟量数字化
即用连续的变化表示成离散的
比如用0 1 2 3这样的数值
来表示它们
它们彼此之间有明确的界限
它们是不连续的
之所以能够把模拟变化的连续量
改用数字方式的离散量表示
是因为我们感官的分辨能力
有一定的限度
这种不连续的跳跃
如果小到人的感官分辨不出来
虽然是用离散的数字表示
它和用连续的模拟表示
也没有什么区别
同样的原理
比赛中运动员的动作是连续的
可是在电视屏幕上放映出来的
却是一帧一帧离散的画面
但是
只要每秒的帧数足够多
就感觉不到它是离散的
因而
连续与离散之间的鸿沟
给我们带来很多思考
首先
离散量的精度是有限的
数字信号不能达到无限的精确
因此
数字世界
可以近似地表示真实世界
但不能完全模拟它
二 离散量和连续量之间的模/数
数/模之间的转换
需要耗费
计算机系统大量的时间
和其他的资源
这就是必需付出的代价
现在
你应该更加全面地
理解二进制了吧
好
这一节就到这
谢谢大家
-1.1 计算思维及其教育
--Video
-2.1 计算是什么
--Video
-2.2 计算与自动计算
--Video
-2.3 计算机及其计算本质特征(I)
--Video
-2.4 计算机及计算的本质特征(II)
--Video
-3.1 数的表示与模拟计算
--Video
-3.2 数的表示与数字计算
--Video
-3.3 二进制加法运算的机器化
--Video
-3.4 “九九归一”的加法运算
--Video
-3.5 二进制之优越性及问题与代价
--Video
-4.1 从数学危机到图灵机
--Video
-4.2 图灵机的计算能力
--Video
-4.3 什么问题都能计算吗?
--Video
-4.4 冯•诺依曼机及其发展与演化
--Video
-4.5 从算盘到图灵机——机械计算的本质
--Video
-4.6 电子计算机——透过现象看本质
--Video
-5.1 思维可机械计算吗(I)
--Video
-5.2 思维可机械计算吗(II)
--Video
-6.1 量子理论
--Video
-6.2 量子计算机
--Video
-7.1 人类求解问题之过程
--Video
-7.2 基于计算(机)的问题求解过程
--Video
-7.3 面向过程的结构化设计方法学
--Video
-7.4 面向对象之方法学
--Video
-7.5 面向对象技术
--Video
-7.6 抽象
--Video
-7.7 计算学科中的抽象
--Video
-7.8 时间与空间及其相互转换
--Video
-7.9 技术层面的其他方法学
--Video
-7.10 认知层面的其他方法学
--Video
-8.1 算法与程序
--Video
-8.2 算法设计方法——枚举
--Video
-8.3 算法设计方法——递推
--Video
-8.4 算法设计方法——递归
--Video
-8.5 算法设计方法——分治
--Video
-8.6 算法设计方法——仿生
--Video
-9.1 机器间的通信方式
--Video
-9.2 数据转发方法
--Video
-9.3 网络分层体系结构
--Video
-9.4 有趣的对称加密技术
--Video
-9.5 难解的非对称加密技术
--Video
-9.6 数字签名及其应用
--Video
-9.7 从自然智能到人工智能
--Video
-9.8 符号主义的基本思想
--Video
-9.9 连接主义Ⅰ
--Video
-9.10 连接主义Ⅱ
--Video
-9.11 行为主义的基本思想
--Video
-9.12 机器翻译的愿景与困难
--Video
-9.13 峰回路转的自然语言处理
--Video
-9.14 信息传输中的问题与挑战
--Video
-9.15 重复传输与冗余编码
--Video
-9.16 校验与校验和
--Video
-9.18 自纠错技术及应用
--Video
-9.19 两种简单的数据压缩方法
--Video
-9.20 哈夫曼编码
--Video
-9.21 数据压缩极限与LZ压缩方法
--Video
-9.22 大海捞针的搜索引擎
--Video
-9.23 网页排序方法(PageRank)
--Video
-10.1 计算文化
--Video
-期末考试--作业