FPGA学习笔记(二)——二进制编码

二进制编码


1.BCD码 — 在计算机表示十进制数据

  由于十进制共有0-9是个数码,因此为了能够全面的表述他们,必须使用至少4位二进制数码来表示1位十进制码。4位二进制数共有0000~1111,共16种编码形式,可以从中任选10个来分别代表十进制数中的10个数码,因此方法有很多多种。

有权BCD码

  有权BCD码是指表示十进制数码的4位二进制编码中,每一位二进制编码都有一定的权值,如8421码、2421码:

十进制 8421码 2421码
0 0000 0000
1 0001 0001
2 0010 0010
3 0011 0011
4 0100 0100
5 0101 1011
6 0110 1100
7 0111 1101
8 1000 1110
9 1001 1111

(1)8421码

  8421码是最常用的有权BCD码,在这种编码方式中,每一位二值代码的“1”都代表一个固定数值。将每位“1”所代表的二进制数加起来就可以得到它所代表的十进制数字。因为代码中从左至右看每一位“1”分别代表数字“8”“4”“2”“1”,故得名8421码。
如:
[ 1001 ] 8421 B C D = 1 8 + 0 4 + 0 2 + 1 1 = 9 {[1001]_{8421BCD}} = 1*8 + 0*4 + 0*2 + 1*1 = 9

(2)2421码

  2421码它也是一种有权码,权值从高到底为2、4、2、1。特点是大于等于5的4位二进制数中最高位为1,小于5的最高为为0;2421中,0和9、1和8、2和7、3和6、4和5、互为反码,这种特性被称为自然互补性。
如:
[ 1111 ] 2421 = 1 2 + 1 4 + 1 2 + 1 1 = 9 {[1111]_{2421}} = 1*2 + 1*4 + 1*2 + 1*1 = 9

无权码

  无权BCD码中,每一位二进制编码都没有固定的权值,因此不能通过按位展开乘权相加的方法来得出它们所代表的十进制数。由于它们不受权值的限制,因此它们的形式更加灵活,并且有着各自比较独特的优点。

十进制 8421码 余三码
0 0000 0011
1 0001 0100
2 0010 0101
3 0011 0110
4 0100 0111
5 0101 1000
6 0110 1001
7 0111 1010
8 1000 1011
9 1001 1100

余三码

  余三码是在821码的基础上,对以每个码字加3得到的,它的特点:当十进制的和为9时,相应二进制编码和正好是15,于是可自动产生进位信号,而不需要修正,不过求和后的值需要修正。
如:
[ 0100 ] = 1 [ 1011 ] = 8 {} {[0100]_{余三码}} = 1\\ {[1011]_{余三码}} = 8
十进制1+8=9(相加为十进制的9)
二进制0100+1011=1111(相加为十进制的15)

格雷码

  在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同 ,则称这种编码为格雷码:

十进制 8421码 格雷码
0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 1100
9 1001 1101

  格雷码属于可靠性编码,是一种错误最小化的编码方式,例如从十进制的3(0011)转换为4(0100)时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化,比如3变4(0010->0110)只有一位产生变化,这在通信传输中非常有用。它大大地减少了由一个状态到下一个状态时逻辑的混淆。

二进制求其格雷码:二进制数0101,要求它对应的格雷码,先将0101>>1 , 得到 0010,然后(0101)^(0010) =0111就得到其对应的格雷码。

2.ASCII码—在计算机中表示字符

  在计算机中,所有的数据存储和运算时都要使用二进制表示,那像“a”,“A”,“b”,“B”,“c”,“C”这样的字符在计算机中存储时也要使用二进制数来表示。具体怎么表示,就出现了一套约定俗成的编码方式——ASCII码。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。
在这里插入图片描述

3.补码 —在计算机中表示负数

负数为什么要用补码来表示呢?
  在计算机中只有加法器,没有减法器,因此减法是通过加法器来计算的,比如3-3是通过3+(-3)这样计算的:

//3的原码
0000_0011
//3的补码(即-3在计算机中的表示形式)
1111_1101

//则3+(-3)
 0000_0011
+1111_1101
----------
10000_0000
//取低八位(0000_0000)就为0

所以在计算机中负数要用补码来表示,这样才能被计算机识别并用于计算等。

猜你喜欢

转载自blog.csdn.net/qq_40147893/article/details/107594239