admin管理员组

文章数量:1794759

数字电路设计—第一讲

数字电路设计—第一讲

第一章 数字系统

本章提要:

十进制数与二进制数十进制数与二进制数之间的转换八进制数与十六进制数二进制数的运算十进制数与二进制数

在我们所生活的现实世界中,几乎全部的计数方式都是采用十进制数字。但是在计算机的世界中,一切计数都是采用二进制数进行的。所以,在本章一开始我们需要先来认识一下十进制数和二进制数。

网络经济十进制的数值系统我们再熟悉不过了,其具有以下特点:

它是由 0\\sim9 这十个数字组成的。以 10 为基底的数系。逢十进一。每一位数字都有权重。比如:

个位数:权重为 1 ;

十位数:权重为 10 ;

百位数:权重为 100 ;

以此类推。

十进制数的一般形式为:

D_mD_{m-1}...D_2D_1D绿色环保产品_0.D_{-1}D_{-2}...D_{-n}

其中 D_i 表示数元,也就是在第 i 个位置上的数字大小。以小数点为界限,左侧为整数部分,右侧为小数部分。我们先来看到整数部分:

整数部分的第一位是 D_0 (个位),其权重是 10^0=1 ;而第二位是 D_{1} (十位),其权重是 10^1=10 ;....以此类推,第 (m+1) 位是 D_m 其权重是 10^m 。

再来看小数部分。从小数点右侧开始便是小数部分了,小数部分的第一位是 D_{-1} (十分位),之所以使用 -1 做为下标依然是为了方便表示该位的权重值,所以其权重值是 10^{-1}=0.1 ,小数部分的第二位 D_{-2} (百分位)的权重值是 10^{-2}=0.01 ,...以此类推,小数部分的最后一位 D_{-n} 的权重值就是 10^{-n} 。

一个十进制数等于其每一位上的数字乘以相应的权重值在求和。比如:

753.68=7\\cdot 10^2+5\\cdot 10^1+3\\cdot 10^0+6\\cdot 10^{-1}+8\\cdot 10^{-2}

对于一般形式的 r 进制数:

R_mR_{m-1}...R_2R_1R_0.R_{-1}R_{-2}...R_{-n}

其中, R_i 可以是 0\\sim r-1 中的任何一个数。则有:

R_mR_{m-1}...R_2R_1R_0.R_{-1}R_{-2}...R_{-n}=\\sum_{k=-n}^{m}R_{k}\\cdot r^k

这样,我们就可以比较清晰的定义二进制数的一般形式以及其各个位上的权重值了:

B_mB_{m-1}...B_2B_1B_0.B_{-1}B_{-2}...B_{-n}

其中整数部分各个位上的权重值为 2^i, \\ \\ \\ i=0,1,2,...,m ,小数部分各个位上的权重值为 2^j,\\ \\ \\ j=-n,-n+1,...,-1 。所以一个二进制数也可以表示为:

B_mB_{m-1}...B_2B_1B_0.B_{-1}B_{-2}..囊肿.B_{-n}=\\su瓷砖粘合剂m_{k=-n}^{m}B_{k}\\cdot 2^k

例 1.1.2

(1011.01)_{B}=1\\cdot 2^3+0\\cdot 2^2+1\\cdot 2^1+1\\cdot 2^1+0\\cdot 2^{-1}+1\\cdot 2^{-2}=(11.25)_D

上例中二进制数 (1011.01)_{B} 最终转换成为了十进制数 (11.25)_{D} ,这也暗示了各个进制的数字之间是可以相互转换的,下面我们就从二进制数与十进制数之间的转换开始说起。

2. 二进制数与十进制数之间的转换

首先,我们我来看一个二进制数如何转换为一个十进制数。这个方法其在上面的例 1.1.2中已经提到了,我们怎样盘头发再来总结一下方法:

给定一个二进制数 B_mB_{m-1}...B_2B_1B_0.B_{-1}B_{-2}...B_{-n} ,将其转换为十进制数的方法是将各个位上的数字乘以它对应的权重再求和即可。

例 1.2.1

求二进制数 (101101)_B 所对应的十进制数。

解:

(101101)_B=1\\cdot 2^5+0\\cdot 2^4+1\\cdot 2^3+1\\cdot 2^2+0\\cdot 2^1+1\\cdot 2^0=(45)_D

接新疆纪录片下来,我们再来看如何将十进制数转化为二进制数。我们直接介绍方法:

给定一个十进制数 D_mD_{m-1}...D_2D_1D_0.D_{-1}D_{-2}...D_{-n} ,在将其转化为二进制数时,我们将其整数部分和小数部分分开讨论:

整数部分采用连除法小数部分采用连乘法

首先我们我们先来看看如何将一个十进制整数转化为二进制数,我们通过一个例子让大家来体会一下连除法的运作方式。

例 1.2.2

将十进制整数 (13)_D 转换为二进制数。

解:

这里的连除法更准确的说应该是“除以 2 取整再除以 2 ”除到商为 0 为止,最后将所有的余数倒过来写即可。即:

\\begin{matrix} 13|2={\\color{Blue}6 }...{\\color{Red}1 }&(LSB)\\\\ {\\color{Blue}6 }|2={\\color{Blue}3 }...{\\color{Red}0 }\\\\ 华为心声社区{\\color{Blue}3 }|2={\\color{Blue}1 }...{\\color{Red}1 }\\\\ {\\color{Blue}1 }|2={\\color{Blue}0 }...{\\color{Red}1 }&(MSB) \\end{matrix}

上式中,蓝色数字为每次除以 2 之后得到的商,红色数字是每次除以 2 之后得到的余数,我们将所有的余数倒过来(从下往上写)写就是 (13)_D 的二进制表示了:

(13)_D=(泉岗辉白{\\color{Red}1 }{\\color{Red}1 }{\\color{Red}0 }{\\color{R注册会计师好考吗ed}1姜昆郭德纲 })口罩戴法_B

下面我们再来看看十进制小数如何转化为二进制数。

例 1.2.3

将十进制小数 (0.375)_D散粉和粉饼的区别 转换为二进制数。

解:

十进制小数转化为二进制数所采用的方法我们称为连乘法。这种连乘法更加准确的说应该叫做“乘 2 取小数部分再乘 2 ”,直到积等于 0 为止,最后将所有的整数正过来写即可。即:

\\begin{matrix} 0.375\\cdot 2={\\color{Blue} 0}.{\\color{Red}7 }{\\color{Red} 5}&(MSB)\\\\ {\\color{Red} 0}.{\\电桥法color{Red}7 }{\\color{Red运动处方} 5}\\cdot 2={\\color{Blue} 1}.{\\color{Red} 5}\\\\ {\\color{Red} 0}.{\\color{Red} 5}\\cdot 2={\\color{Blue} 1}.{\\color{Red} 0}&(LSB)\\\\ \\end{matrix}

上式中蓝色数字表示每次乘 2 之后的整数部分,红色数字表示每次乘 2 之后的小数部分。最后,将所有的整数部分正过来写(从上往下)即可。所以:

(0.375)_D=(0.\\color{Blue} 0\\color{Blue} 1\\color{Blue} 1)_B

但是,十进制小数转二进制数的时候也会出现问题,我们先来一个例子:

例 1.2.4

将十进制小数 (0.73)_D 转换为二进制数。

解:

我们依然采用连乘法:

\\begin{matrix} 0.73\\cdot 2=1.46&(MSB)\\\\ 0.46\\cdot 2=0.92\\\\ 0.92\\cdot 2=1.84\\\\ 0.84\\cdot 2=1.68\\\\ 0,68\\cdot 2=1.36&(LSB)\\\\ \\cdots \\end{matrix}

乘了好几次之后发现小数部分永远不会为 0 ,也就是说不是全部的十进制小数都可以精确的转化为二进制数。所以,在碰到这种数字的时候,就需要按照要求取保留小数点后面的几位。比如,要求例1.2.4中的十进制小数转换为二进制数后保留小数点后面 5 位,则做到上面就可以结束了。即保留小数点后五位的转换结果是:

(0.73)_D\\approx(0.10111)_B

3. 八进制数与十六进制数

八进制数和十六进制数的引入是为了便于记忆和减少数据所需要的位元数。八进制数显然就是以 8 为基底的数系,其位元的取值范围是从 0\\sim 7 的整数。当然,十六进制数就是以 16 为基底的数系,其位元的取值范围是从 0\\sim9 的整数和英文字母 A\\sim F (分别对应 10\\sim15 )。下面的两个表格从左到右分别表示的是十进制数、对应的二进制数、对应的八进制数和对应的十六进制数:

图片1.1:各种数系。图片来源:某网课。

显然,八进制数逢 8 进一,十六进制数逢 16 进一。也就是说八进制数的 10 表示的是十进制数的 8 ,十六进制的 10 表示的则是十进制的 16 。

下面,我们首先来学习如何将一个二进制数转换为八进制数。像在十进制数中一样,也要对二进制数的整数和小数部分分开讨论,首先我们要来看到的是整数部分的转换:

从小数点左边第一位开始,往左每三个位元为一组,转换为八进制数。最后不足三个位元时需要在左边补 0 ,且缺几个位元就补几个 0 。

再来看到的是小数部分的转换:

从小数点右边第一位开始,往右每三个位元为一组,转换为八进制数。最后不足三个位元时需要在右边补 0 ,且缺几个位元就补几个 0 。

例 1.3.1

将二进制数 (1011110111101.01011)_B 转换为八进制数。

解:

我们先对整数部分进行转换:

{\\color{Red} 0}{\\color{Red} 0}1\\ \\ 011\\ \\ 110\\ \\ 111\\ \\ 101

通过对比图片 1.1 中的二进制数列和八进制数列有:

({\\color{Red} 0}{\\color{Red} 0}1\\ \\ 011\\ \\ 110\\ \\ 111\\ \\ 101)_B=(1\\ 3\\ 6\\ 7\\ 5)_8

我们再来看到小数部分:

.010\\ \\ 11{\\color{Blue} 0}

通过对比图片 1.1 中的二进制数列和八进制数列有:

.(010\\ \\ 11{\\color{Blue} 0})_B=(.26)_8

综上所述:

(1011110111101.01011)_B=(13675.26)_8

下面,我们再学习一下如何将一个二进制数转化为一个十六进制数。依然是要分成整数部分和小数部分进行讨论,首先是整数部分:

从小数点左边第一位开始,往左每四个位元为一组,转换为十六进制数。最后不足四个位元时需要在左边补 0陈麻花 ,且缺几个位元就补几个 0 。

然后是小数部分:

从小数点右边第一位开始,往右每四个位元为一组,转换为十六进制数。最后不足四个位元时需要在右边补 0 ,且缺几个位元就补几个 0 。

例 1.3.2

将二进制数 (1011110111101.01011)_B 转换为十六进制数。

解:

首先我们先将整数部分进行转换:

{\\color{Red} 0}{\\color{Red} 0}{\\color{Red} 0}1\\ \\ 0111\\ \\ 1011\\ \\ 1101

通过对比图片 1.1 中的二进制数列和十六进制数列有:

({\\color{Red} 0}{\\color{Red} 0}{\\color{Red} 0}1\\ \\ 0111\\ \\ 1011\\ \\ 1101)_B=(1\\ 7\\ B \\ D)_{16}

再来看到小数部分:

.0101\\ \\ 1{\\color{Blue} 0}{\\color{Blue} 0}{\\color{Blue} 0}

通过对比图片 1.1 中的二进制数列和十六进制圆环转动惯量数列有:

(.0101\\ \\ 1{\\color{Blue} 0}{\\color{Blue} 0}{\\color{Blue} 0})_B=(58)_{16}

综上所述:

(1011110111101.01011)_B=(17BD.58)_{16}

最后我们再来看到如何将一个八进制数(十六进制数)转换成为一个十进制数。这里的方法与二进制数转十进制数的方法一致,都是将每一位元乘以相应的权重值后在加起来即可。例如:

(126.34)_8=1\\cdot 8^2+2\\cdot 8^1+6\\cdot 8^0+3\\cdot 8^{-1}+4\\cdot 8^{-2}=(86.4375)_D

然后是十六进制数转十进制数,值得注意的是,若需要被转换的十六进制数里面含有字母 A\\sim F 也没有关系,只需要其转换为对应的数字就可以了。例如:

({\\color{Red} C}24.9)_{16}={\\color{Red}1}{\\color{Red} 2}\\cdot 16^2+2\\cdot 16^1+4\\cdot 16^0+9\\cdot 16^{-1}=(3108.5625)_D

我们再来看到如何将一个十进制数转为八进制数(十六进制数)寻根小说。其转换方法与十进制数转二进制数的方法是一样的,都是整数部分采用连除法,小数部分采用连乘法。我们分别举一个例子:

例 1.3.3

将十进制数 (187苏联新经济政策.3125)_D 转换为八进制数。

解:

首先,我们看到的是整数部分:

\\begin{matrix} 187|8=23...3&(LSB)\\\\ 23|8=2...7\\\\ 2|8=0...2&(MSB)\\\\ \\end{matrix}

所以:

(187)_D=(273)_8

然后是小数部分:

\\begin{matrix} 0.3125\\cdot 8=2.5&(MSB)\\\\ 0.5\\cdot 8=4.0&(LSB)\\\\ \\end{matrix}

所以:

(0.3125)_D=(0.24)_8

综上所述:

(187.3125)_D=(273.24)_8

例 1.3.4

将十进制数 (187.3125)_D 转换为十六进制数。

首先,我们看到的是整数部分:

\\begin{matrix} 187|16=11...11&(论文开题报告LSB)\\\\ 11|16=0...11&(MSB)\\\\ \\end{matrix}

所以:

(187)_D=(BB)_{16}

然后是小数部分:

\\begin{m如何提高弹跳力atrix} 0.3125\\cdot 16=5.0\\\\ \\end{matrix}

所以:

(0.3125)_D=(0.5)_{16}

综上所述:

(187.3125)_D=(BB.5)_{16}

本文标签: 电路设计数字