数字电子技术第一章(二进制,八进制,十六进制,原码,补码,反码)
1.进制介绍:
十进制:
在十进制数中,每一位有0-9十个数码,所以计数的基数是10。超过9的数必须用多位数表示,其中低位和相邻高位之间的关系是:逢十进一,故称为十进制。
例如:
所以一个任意多位的十进制D均可展开为:若以N取代式中的10,即可得到多位任意进制(N进制)数展开式的普遍形式:
式中i的取值与十进制展开式的规定相同。N称为计数的基数,k为第i位的系数,N称为第i位的权。
二进制:
目前在数字电路中应用最广泛的是二进制。在二进制数中,每一位仅有0和1两个可能的数码,所以计数基数为2。低位和相邻高位间的进位关系是“逢二进一”, 故称为二进制。
根据N进制数展开的普遍形式可得任何一个二进制数均可展开为:
并可利用上式计算出它所表达的十进制数的大小:上式中分别使用下脚注2和10表示括号里的数是二进制数和十进制数。有时也用B( Bima-ry)和D( Decimal)代替2和10这两个脚注。
八进制
在某些场合有时也使用八进制。八进制数的每一位有0~7 八个不同的数码,计数的基数为8。低位和相邻的高位之间的进位关系是“逢八进一”。任意一个八进制数可以展开为并可利用上式计算出相应的十进制数:
有时也用O(Oetal)代替下脚注8,表示八进制数。
十六进制
十六进制 数的每一位有十六个不同的数码,分别用0~9.A(10)、B(11) .C(12)、D(13)、E(14)、P(15)表示。因此,任意一个十六进制数均可展开为
并可以利用上式计算出相应的十进制数
式中的下脚注16表示括号里的数是十六进制数,有时也用H( Hexadecimal)代替这个脚注,0X表示前缀。
小节:
不同进制数的对照表:
小拓展:
(1)一位八进制可以表示三位二进制数:
因为三位二进制最小是000b,最大是111b,其范围恰好在0-7,构成了八进制一位。
(2)一位十六进制可以表示为四位二进制
十六进制数的进率是16,二进制数的进率是2,且16=2^4,说明二进制数连续进位4次,等效于16进制数进1位。这么说可能不好理解,那么举个例子吧,比如15+1=16,用二进制表示就是1111+1=10000,用十六进制表示就是F+1=10。这也就说明了一位十六进制数对应四位二进制数了
2.不同进制间的转换
(1)八进制,二进制,十六进制转换为十进制
都可根据上述十进制介绍中的 多位任意进制数展开式的普遍形式 进行转换,即按位权展开式。
(2)十进制转换为二进制,八进制,十六进制
十进制整数转换R进制(R可以是任何整数,比如2,8,16)整数,方法就是除R取余。
1.十进制转换为二进制:
十进制整数转换为二进制:(除二取余,从下往上倒序排序)十进制小数转换为二进制:(乘二取整,从上向下顺序排序)
2.十进制转换为十六进制
十进制数为整数时,除16取余
十进制数为小数时,乘16取整
3.十进制转换为八进制
十进制为整数时,除八取余
十进制为小数时,乘八取整
(3)二进制转换为十六进制
只要从低位到高位将整数部分每4位二进制数分为一组并代之以等值的十六进制数,同时从高位到低位将小数部分的每4位数分为一组并代之以等值的十六进制数,即可得到对应的十六进制数。
若二进制数整数部分最高- -组不足4位时,用0补足4位;小数部分最低一组不足 4位时,也需用0补足4位。
(2)二进制转换为八进制
在将二进制数转换为八进制数时,只要将二进制数的整数部分从低位到高位每3位分为一组并代之以等值的八进制数,同时将小数部分从高位到低位每3位分为一组并代之以等值的八进制数就可以了。二进制数最高一组不足3位或小数部分最低一组不足3位时,仍需以0补足三位。
(3)十六进制转换为二进制
转换时只需将十六进制数的每一位用等值的4位二进制数代替就行了。
(2)八进制转换为二进制
若将八进制数转换为二进制数,则只要将八进制数的每一位代之以等值的3位二进制。
(3)八进制与十六进制之间的转换
第一种:他们之间的转换可以先转成二进制然后再相互转换。
第二种:他们之间的转换可以先转成十进制然后再相互转换
建议:先将八进制转换为对应的二进制,再将二进制转换为十六进制。
3.二进制算数运算
如果我们再能设法将减法操作转化为某种形式的加法操作,那么加,减,乘.除运算就全部可以用“移位”和“相加”两种操作实现了。利用上述特点能使运算电路的结构大为简化。这也是
(1)反码,补码和补码运算
我们已经知道,在数字电路中是用逻辑电路输出的高、低电平表示二进制数的1和0的。
那么数的正,负又如何表示呢?通常采用的方法是在二进制数的前面增加一位符号位。符号位为0表示这个数是正数,符号位为1表示这个数是负数。这种形式的数称为原码。
因为计算机只会执行加法,不会进行减法运算,所以我们考虑怎样把二进制的减法运算变为加法运算,这里就出现了补码。
可以发现:在舍弃进位的条件下,减去某个数可以用加上它的补码来代替!!!
然后我们考虑,如果直接得到原码的补码的话非常麻烦,所以这里就出现了反码这个中介。
反码:正数(即符号位为0)的反码与原码相同,负数(即符号位为1)的反码为(注意:符号位不变)原码的数值位逐位取反(即1变为0,0变为1)。
补码:正数的补码与原码相同,负数的补码为原码的数值位(注意:符号位不变)逐位取反再加1。 即直接原码的反码加1即可!!!
注意:求原码对应的补码是逐位取反再加1;
那么求补码对应的原码也是一样,逐位取反再加1.
下面再来讨论两个用补码表示的二进制数相加时,和的符号位如何得到。为此,我们在例下面再来讨论两个用补码表示的二进制数相加时,和的符号位如何得到。
为此,我们在例1.4.2中列举出了两数相加时的四种情况。
(2)几种常用的编码
1.十进制码
为了用二进制代码表示十进制数的0~9这十个状态,二进制代码至少应当有4位。4位二进制代码一共有十六个(000-1111),取其中哪十个以及如何与0-9相对应,有许多种方案。
表1.5.1中列出了常见的几种十进制代码,它们的编码规则各不相同。
(1)8421码又称BCD( Binary Coded Decimal)码,是十进制代码中最常用的一种。在这种编码方式中,每一位二值代码的1都代表一个固定数值,将每一位的 1代表的十进制数加起来,得到的结果就是它所代表的十进制数码。由于代码中从左到右每一位的1分别表示8,4,2,1,所以将这种代码称为8421码。每一位的1代表的十进制数称为这一位的权。8421码中每一位的权是固定不变的,它属于恒权代码。
余3码的编码规则与8421码不同,如果把每–个余3码看作4位二进制数.则它的数值要# 1.进制介绍:
十进制:
在十进制数中,每一位有0-9十个数码,所以计数的基数是10。超过9的数必须用多位数表示,其中低位和相邻高位之间的关系是:逢十进一,故称为十进制。
例如:
所以一个任意多位的十进制D均可展开为:若以N取代式中的10,即可得到多位任意进制(N进制)数展开式的普遍形式:
式中i的取值与十进制展开式的规定相同。N称为计数的基数,k为第i位的系数,N称为第i位的权。
二进制:
目前在数字电路中应用最广泛的是二进制。在二进制数中,每一位仅有0和1两个可能的数码,所以计数基数为2。低位和相邻高位间的进位关系是“逢二进一”, 故称为二进制。
根据N进制数展开的普遍形式可得任何一个二进制数均可展开为:
并可利用上式计算出它所表达的十进制数的大小:上式中分别使用下脚注2和10表示括号里的数是二进制数和十进制数。有时也用B( Bima-ry)和D( Decimal)代替2和10这两个脚注。
八进制
在某些场合有时也使用八进制。八进制数的每一位有0~7 八个不同的数码,计数的基数为8。低位和相邻的高位之间的进位关系是“逢八进一”。任意一个八进制数可以展开为并可利用上式计算出相应的十进制数:
有时也用O(Oetal)代替下脚注8,表示八进制数。
十六进制
十六进制 数的每一位有十六个不同的数码,分别用0~9.A(10)、B(11) .C(12)、D(13)、E(14)、P(15)表示。因此,任意一个十六进制数均可展开为
并可以利用上式计算出相应的十进制数
式中的下脚注16表示括号里的数是十六进制数,有时也用H( Hexadecimal)代替这个脚注,0X表示前缀。
小节:
不同进制数的对照表:
小拓展:
(1)一位八进制可以表示三位二进制数:
因为三位二进制最小是000b,最大是111b,其范围恰好在0-7,构成了八进制一位。
(2)一位十六进制可以表示为四位二进制
十六进制数的进率是16,二进制数的进率是2,且16=2^4,说明二进制数连续进位4次,等效于16进制数进1位。这么说可能不好理解,那么举个例子吧,比如15+1=16,用二进制表示就是1111+1=10000,用十六进制表示就是F+1=10。这也就说明了一位十六进制数对应四位二进制数了
2.不同进制间的转换
(1)八进制,二进制,十六进制转换为十进制
都可根据上述十进制介绍中的 多位任意进制数展开式的普遍形式 进行转换,即按位权展开式。
(2)十进制转换为二进制,八进制,十六进制
十进制整数转换R进制(R可以是任何整数,比如2,8,16)整数,方法就是除R取余。
1.十进制转换为二进制:
十进制整数转换为二进制:(除二取余,从下往上倒序排序)十进制小数转换为二进制:(乘二取整,从上向下顺序排序)
2.十进制转换为十六进制
十进制数为整数时,除16取余
十进制数为小数时,乘16取整
3.十进制转换为八进制
十进制为整数时,除八取余
十进制为小数时,乘八取整
(3)二进制转换为十六进制
只要从低位到高位将整数部分每4位二进制数分为一组并代之以等值的十六进制数,同时从高位到低位将小数部分的每4位数分为一组并代之以等值的十六进制数,即可得到对应的十六进制数。
若二进制数整数部分最高- -组不足4位时,用0补足4位;小数部分最低一组不足 4位时,也需用0补足4位。
(2)二进制转换为八进制
在将二进制数转换为八进制数时,只要将二进制数的整数部分从低位到高位每3位分为一组并代之以等值的八进制数,同时将小数部分从高位到低位每3位分为一组并代之以等值的八进制数就可以了。二进制数最高一组不足3位或小数部分最低一组不足3位时,仍需以0补足三位。
(3)十六进制转换为二进制
转换时只需将十六进制数的每一位用等值的4位二进制数代替就行了。
(2)八进制转换为二进制
若将八进制数转换为二进制数,则只要将八进制数的每一位代之以等值的3位二进制。
(3)八进制与十六进制之间的转换
第一种:他们之间的转换可以先转成二进制然后再相互转换。
第二种:他们之间的转换可以先转成十进制然后再相互转换
建议:先将八进制转换为对应的二进制,再将二进制转换为十六进制。
3.二进制算数运算
如果我们再能设法将减法操作转化为某种形式的加法操作,那么加,减,乘.除运算就全部可以用“移位”和“相加”两种操作实现了。利用上述特点能使运算电路的结构大为简化。这也是
(1)反码,补码和补码运算
我们已经知道,在数字电路中是用逻辑电路输出的高、低电平表示二进制数的1和0的。
那么数的正,负又如何表示呢?通常采用的方法是在二进制数的前面增加一位符号位。符号位为0表示这个数是正数,符号位为1表示这个数是负数。这种形式的数称为原码。
因为计算机只会执行加法,不会进行减法运算,所以我们考虑怎样把二进制的减法运算变为加法运算,这里就出现了补码。
可以发现:在舍弃进位的条件下,减去某个数可以用加上它的补码来代替!!!
然后我们考虑,如果直接得到原码的补码的话非常麻烦,所以这里就出现了反码这个中介。
反码:正数(即符号位为0)的反码与原码相同,负数(即符号位为1)的反码为(注意:符号位不变)原码的数值位逐位取反(即1变为0,0变为1)。
补码:正数的补码与原码相同,负数的补码为原码的数值位(注意:符号位不变)逐位取反再加1。 即直接原码的反码加1即可!!!
注意:求原码对应的补码是逐位取反再加1;
那么求补码对应的原码也是一样,逐位取反再加1.
下面再来讨论两个用补码表示的二进制数相加时,和的符号位如何得到。为此,我们在例下面再来讨论两个用补码表示的二进制数相加时,和的符号位如何得到。
为此,我们在例1.4.2中列举出了两数相加时的四种情况。
(2)几种常用的编码
1.十进制码
为了用二进制代码表示十进制数的0~9这十个状态,二进制代码至少应当有4位。4位二进制代码一共有十六个(000-1111),取其中哪十个以及如何与0-9相对应,有许多种方案。
表1.5.1中列出了常见的几种十进制代码,它们的编码规则各不相同。
(1)8421码又称BCD( Binary Coded Decimal)码,是十进制代码中最常用的一种。在这种编码方式中,每一位二值代码的1都代表一个固定数值,将每一位的 1代表的十进制数加起来,得到的结果就是它所代表的十进制数码。由于代码中从左到右每一位的1分别表示8,4,2,1,所以将这种代码称为8421码。每一位的1代表的十进制数称为这一位的权。8421码中每一位的权是固定不变的,它属于恒权代码。
余3码的编码规则与8421码不同,如果把每–个余3码看作4位二进制数.则它的数值要# 1.进制介绍:
十进制:
在十进制数中,每一位有0-9十个数码,所以计数的基数是10。超过9的数必须用多位数表示,其中低位和相邻高位之间的关系是:逢十进一,故称为十进制。
例如:
所以一个任意多位的十进制D均可展开为:若以N取代式中的10,即可得到多位任意进制(N进制)数展开式的普遍形式:
式中i的取值与十进制展开式的规定相同。N称为计数的基数,k为第i位的系数,N称为第i位的权。
二进制:
目前在数字电路中应用最广泛的是二进制。在二进制数中,每一位仅有0和1两个可能的数码,所以计数基数为2。低位和相邻高位间的进位关系是“逢二进一”, 故称为二进制。
根据N进制数展开的普遍形式可得任何一个二进制数均可展开为:
并可利用上式计算出它所表达的十进制数的大小:上式中分别使用下脚注2和10表示括号里的数是二进制数和十进制数。有时也用B( Bima-ry)和D( Decimal)代替2和10这两个脚注。
八进制
在某些场合有时也使用八进制。八进制数的每一位有0~7 八个不同的数码,计数的基数为8。低位和相邻的高位之间的进位关系是“逢八进一”。任意一个八进制数可以展开为并可利用上式计算出相应的十进制数:
有时也用O(Oetal)代替下脚注8,表示八进制数。
十六进制
十六进制 数的每一位有十六个不同的数码,分别用0~9.A(10)、B(11) .C(12)、D(13)、E(14)、P(15)表示。因此,任意一个十六进制数均可展开为
并可以利用上式计算出相应的十进制数
式中的下脚注16表示括号里的数是十六进制数,有时也用H( Hexadecimal)代替这个脚注,0X表示前缀。
小节:
不同进制数的对照表:
小拓展:
(1)一位八进制可以表示三位二进制数:
因为三位二进制最小是000b,最大是111b,其范围恰好在0-7,构成了八进制一位。
(2)一位十六进制可以表示为四位二进制
十六进制数的进率是16,二进制数的进率是2,且16=2^4,说明二进制数连续进位4次,等效于16进制数进1位。这么说可能不好理解,那么举个例子吧,比如15+1=16,用二进制表示就是1111+1=10000,用十六进制表示就是F+1=10。这也就说明了一位十六进制数对应四位二进制数了
2.不同进制间的转换
(1)八进制,二进制,十六进制转换为十进制
都可根据上述十进制介绍中的 多位任意进制数展开式的普遍形式 进行转换,即按位权展开式。
(2)十进制转换为二进制,八进制,十六进制
十进制整数转换R进制(R可以是任何整数,比如2,8,16)整数,方法就是除R取余。
1.十进制转换为二进制:
十进制整数转换为二进制:(除二取余,从下往上倒序排序)十进制小数转换为二进制:(乘二取整,从上向下顺序排序)
2.十进制转换为十六进制
十进制数为整数时,除16取余
十进制数为小数时,乘16取整
3.十进制转换为八进制
十进制为整数时,除八取余
十进制为小数时,乘八取整
(3)二进制转换为十六进制
只要从低位到高位将整数部分每4位二进制数分为一组并代之以等值的十六进制数,同时从高位到低位将小数部分的每4位数分为一组并代之以等值的十六进制数,即可得到对应的十六进制数。
若二进制数整数部分最高- -组不足4位时,用0补足4位;小数部分最低一组不足 4位时,也需用0补足4位。
(2)二进制转换为八进制
在将二进制数转换为八进制数时,只要将二进制数的整数部分从低位到高位每3位分为一组并代之以等值的八进制数,同时将小数部分从高位到低位每3位分为一组并代之以等值的八进制数就可以了。二进制数最高一组不足3位或小数部分最低一组不足3位时,仍需以0补足三位。
(3)十六进制转换为二进制
转换时只需将十六进制数的每一位用等值的4位二进制数代替就行了。
(2)八进制转换为二进制
若将八进制数转换为二进制数,则只要将八进制数的每一位代之以等值的3位二进制。
(3)八进制与十六进制之间的转换
第一种:他们之间的转换可以先转成二进制然后再相互转换。
第二种:他们之间的转换可以先转成十进制然后再相互转换
建议:先将八进制转换为对应的二进制,再将二进制转换为十六进制。
3.二进制算数运算
如果我们再能设法将减法操作转化为某种形式的加法操作,那么加,减,乘.除运算就全部可以用“移位”和“相加”两种操作实现了。利用上述特点能使运算电路的结构大为简化。这也是
(1)反码,补码和补码运算
我们已经知道,在数字电路中是用逻辑电路输出的高、低电平表示二进制数的1和0的。
那么数的正,负又如何表示呢?通常采用的方法是在二进制数的前面增加一位符号位。符号位为0表示这个数是正数,符号位为1表示这个数是负数。这种形式的数称为原码。
因为计算机只会执行加法,不会进行减法运算,所以我们考虑怎样把二进制的减法运算变为加法运算,这里就出现了补码。
可以发现:在舍弃进位的条件下,减去某个数可以用加上它的补码来代替!!!
然后我们考虑,如果直接得到原码的补码的话非常麻烦,所以这里就出现了反码这个中介。
反码:正数(即符号位为0)的反码与原码相同,负数(即符号位为1)的反码为(注意:符号位不变)原码的数值位逐位取反(即1变为0,0变为1)。
补码:正数的补码与原码相同,负数的补码为原码的数值位(注意:符号位不变)逐位取反再加1。 即直接原码的反码加1即可!!!
注意:求原码对应的补码是逐位取反再加1;
那么求补码对应的原码也是一样,逐位取反再加1.
下面再来讨论两个用补码表示的二进制数相加时,和的符号位如何得到。为此,我们在例下面再来讨论两个用补码表示的二进制数相加时,和的符号位如何得到。
为此,我们在例1.4.2中列举出了两数相加时的四种情况。
(2)几种常用的编码
1.十进制码
为了用二进制代码表示十进制数的0~9这十个状态,二进制代码至少应当有4位。4位二进制代码一共有十六个(000-1111),取其中哪十个以及如何与0-9相对应,有许多种方案。
表1.5.1中列出了常见的几种十进制代码,它们的编码规则各不相同。
(1)8421码又称BCD( Binary Coded Decimal)码,是十进制代码中最常用的一种。在这种编码方式中,每一位二值代码的1都代表一个固定数值,将每一位的 1代表的十进制数加起来,得到的结果就是它所代表的十进制数码。由于代码中从左到右每一位的1分别表示8,4,2,1,所以将这种代码称为8421码。每一位的1代表的十进制数称为这一位的权。8421码中每一位的权是固定不变的,它属于恒权代码。
(2)余3码的编码规则与8421码不同,如果把每–个余3码看作4位二进制数.则它的数值要比它所表示的十进制数码多3,故而将这种代码称为余3码。
如果将两个余3码相加,所得的和将比十进制数和所对应的二进制数多6。
因此,在用余3码做十进制加法运算时.若两数之和为10.正好等于二进制数的16.于是便从高位自动产生进位信号。此外,从表1.5.1中还可以看出,0和9、1和8.2和7,3和6.4和5的余3码互为反码,这对于求取对10的补码是很方便的。
余3码不是恒权代码。如果试图将每个代码视为二进制数,并使它等效的十进制数与所表示的代码相等,那么代码中每一位的1所代表的十进制数在各个代码中不能是固定的。
(3)2421码是一种恒权代码,它的0和9.1和8.2和7,3和6.4和5也互为反码,这个特点和余3码相仿。
(4)5211码是另一种恒权代码。待学了第六章中计数器的分频作用后可以发现,如果按8421码接成十进制计数器,则连续输入计数脉冲时,4个触发器输出脉冲对于计数脉冲的分频比从低位到高位依次为5:2:1:1。可见,5211 码每一位的权正好与8421码十进制计数器4个触发器输出脉冲的分频比相对应。这种对应关系在构成某些数字系统时很有用。
(5)余3循环码是- -种变权码,每一位的1在不同代码中并不化表固定的数值。它的主要特点是相邻的两个代码之间仅有一位的状态不同,
2.格雷码
格雷码(GrayCode)又称循环码。从表1.5.2的4位格雷码编码表中可以看出格雷码的构成方法,这就是每一位的状态变化都按一定的 顺序循环。如果从0000开始,最右边一位的状态按0110顺序循环变化,右边第二位的状态按01011100 顺序循环变化,右边第三位按00011111100000顺序循环变化。可见,自右向左,每一位状态循环中连续的0,1数目增加一倍。由于4位格雷码只有16 个,所以最左边一位的状态只有半个循环,即0000001111111。按照上述原则,我们就很容易得到更多位数的格雷码。
与普通的二进制代码相比,格雷码的最大优点就在于当它按照表1.5.2的编码顺序依次变化时,相邻两个代码之间只有一位发生变化。这样在代码转换的过程中就不会产生过渡“噪声”。而在普通二进制代码的转换过程中,则有时会产生过渡噪声。例如,第四行的二进制代码0011转换为第五行的0100过程中,如果最右边一位的变化比其他两位的变化慢,就会在一个极短的瞬间出现0101状态,这个状态将成为转换过程中出现的噪声。而在第四行的格雷码0010向第五行的0110转换过程中则不会出现过渡噪声。这种过渡噪声在有些情况下甚至会影响电路的正常工作,这时就必须采取揩施加以避免。在第4.9节中我们还将进一步讨论这个问题:十进制代码中的余3循环码就是取4位格雷码中的十个代码组成的,它仍然具有格雷码的优点,即两个相邻代码之间仅有一位不同。