我是靠谱客的博主 开朗哈密瓜,最近开发中收集的这篇文章主要介绍十进制数的编码与运算简介1 有权码2 无权码,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

简介

  1. 在计算机中采用4位二进制码对每个十进制数位进行编码。
  2. 4位二进制码有16中不同的组合,从中选出10种来表示十进制数位的0~9,有多种方案可供选择,下面介绍最常用的几种。

1 有权码

  1. 表示一位十进制数的二进制码的每一位有确定的权。
  2. 一般用8421码,其4个二进制码的权从高到低分别为8、4、2 和 1.
  3. 用0000、0001、···、1001 分别表示0、1、···、9,每个数位内部满足二进制规则,而数位之间满足十进制规则,故称这种编码为“以二进制编码的十进制码”(binary coded decimal,BCD).
十进制二进制
00000
70111
120001 0010
130001 0011
1270001 0010 0111
2340010 0011 0100

1.1 BCD码加法运算修正规则:

  1. 如果两个一位BCD码相加之和小于或等于(1001)2,即(9)10,不需要修正;

  2. 如果相加之和大于或等于(10)10,要进行加6修正,并向高位进位,进位可以在首次相加或修正时产生。

    	1 + 8 = 9							4 + 9 = 13									9 + 7 = 16
    	
    	0	0	0	1						0	1	0	0								1	0	0	1
    +	1	0	0	0					+	1	0	0	1						+		0	1	1	1
    —————————————————					—————————————————						—————————————————————
    	1	0	0	1						1	1	0	1							1	0	0	0	0
    不需要修正							+	0	1	1	0	修正				+		0	1	1	0	修正
    								—————————————————————						—————————————————————
    									1	0	0	1	1							1	0	1	1	0
    

1.2 BCD码加6修正的由来

十进制二进制BCD码二进制差值
1010101 00000110
1110111 00010110
1211001 00100110
1311011 00110110
1411101 01000110
1511111 01010110
161 00001 01100110
171 00011 01110110
181 00101 10000110
191 00111 10010110

说明:两个十进制一位数相加的结果小于或等于19,在[10, 19]范围内,每一个十进制数的BCD码都比二进制码小了6,换算成二进制码,也就是0110.

2 无权码

表示一个十进制数位的二进制码的每一位没有确定的权。使用较多的是余3码(Excess-3 Code)和格雷码(Gray Code),格雷码又称“循环码”。

十进制余3码格雷码(1)格雷码(2)
0001100000000
1010000010100
2010100110110
3011000100010
4011101101010
5100011101011
6100110100011
7101010000001
8101111001001
9110001001000

2.1 余3码

在8421码的基础上,把每个编码都加上0011而形成的,如上表所示。

2.1.1 加法规则

  1. 当两个余3码相加不产生进位时,应从结果中减去0011;

  2. 产生进位时,应将进位信号送入高位,本位加0011。

     	(28)~10~ + (55)~10~ = (83)~10~
     
     	0	1	0	1					1	0	1	1			(28)~10~
     +)	1	0	0	0			~1~		1	0	0	0			(55)~10~
     ————————————————————————————————————————————————				低位向高位产生进位,高位不产生进位。
     	1	1	1	0					0	0	1	1
     -)	0	0	1	1				+)	0	0	1	1
     ————————————————————————————————————————————————				低位+3,高位-3。(0011)~2~ = (3)~10~
     	1	0	1	1					0	1	1	0
    

二进制的(1010)2需要借助(0110)2才能完成BCD码的进位,造成相加结果少了6,也就是加数和被加数都少了3,所以相加结果需要加3得到余3码。

2.2 格雷码

在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。
若不作特别说明,格雷码就是指典型格雷码,它可从自然二进制码转换而来。

优点:从一个编码变到下一个相邻编码时,只有1位发生变化。

特点:

  1. 格雷码属于可靠性编码,是一种错误最小化的编码方式。因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。由于这种编码相邻的两个码组之间只有一位不同,因而在用于方向的转角位移量-数字量的转换中,当方向的转角位移量发生微小变化(而可能引起数字量发生变化时,格雷码仅改变一位,这样与其它编码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性;
  2. 格雷码是一种绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便;
  3. 由于格雷码是一种变权码,每一位码没有固定的大小,很难直接进行比较大小和算术运算,也不能直接转换成液位信号,要经过一次码变换,变成自然二进制码,再由上位机读取;
  4. 典型格雷码是一种采用绝对编码方式的准权码,其权的绝对值为2i-1(设最低位i=1);
  5. 格雷码的十进制数奇偶性与其码字中1的个数的奇偶性相同。

2.2.1 格雷码编码方法

2.2.1.1 递归生成码表

这种方法基于格雷码是反射码的事实,利用递归的如下规则来构造:

  1. 1位格雷码有两个码字;
  2. (n+1)位格雷码中的前2n个码字等于n位格雷码的码字,按顺序书写,加前缀0;
  3. (n+1)位格雷码中的后2n个码字等于n位格雷码的码字,按逆序书写,加前缀1;
  4. n+1位格雷码的集合 = n位格雷码集合(顺序)加前缀0 + n位格雷码集合(逆序)加前缀1。
1位格雷码2位格雷码3位格雷码4位格雷码
0000000000
1010010001
110110011
100100010
1100110
1110111
1010101
1000100
1100
1101
1111
1110
1010
1011
1001
1000

2.2.1.2 异或转换

将二进制码从右向左依次编号为0,1,2,···,n-1。
二进制码–>格雷码:

G~i~ = B~i~ xor B~i+1~,i = 0,···,n-1,令B~n~ = 0

格雷码–>二进制码

G~i~ = B~i~ xor B~i+1~,i = n-1,···,0,令B~n~ = 0

2.2.1.3 卡诺图

  1. 将卡诺图变量分为两组,变量数目相近(最好相等)
  2. 以逻辑变量高位在左低位在右建立卡诺图
  3. 从卡诺图的左上角以之字形到右上角最后到左下角遍历卡诺图,依次经过格子的变量取值即为典型格雷码的顺序

三位格雷码(建立在二位格雷码基础上)

ABC01
00000 -->001
01010<-- 011
11110 -->111
10100<-- 101

四位格雷码(建立在三位格雷码基础上)

ABCD00011110
000000 -->0001 -->0011 -->0010
010100<-- 0101<-- 0111<-- 0110
111100 -->1101 -->1111 -->1110
101000<-- 1001<-- 1011<-- 1010

2.2.1.4 使用异或乘除

用异或代替加减进行二进制竖式乘除,称为异或乘除,它的特点是无进退位。
如:10101除以11将变成1100余1。
二进制转格雷码:
只要异或乘以二分之三,即二进制的1.1,然后忽略小数部分;也可以理解成异或乘以三(即11),再右移一位。
格雷码转二进制:
异或乘以三分之二,即除以1.1,忽略余数;或者左移一位,再异或除以三,忽略余数。

最后

以上就是开朗哈密瓜为你收集整理的十进制数的编码与运算简介1 有权码2 无权码的全部内容,希望文章能够帮你解决十进制数的编码与运算简介1 有权码2 无权码所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部