码制
数字系统中,数码不仅能表示数字,还能传递信息,这就是 编码
ASCLL 码
ASCLL 码是计算机系统中最常见的编码,它是用来表示一些在字符的编码集合,所以在编程语言中,字符型的数据和整型数据之间在一定范围内是一致的。
ASCLL 码表(数据来自博主加油当当)
BCD 码制
BCD 码是用四位二进制数来表示一位 0~9 的十进制数。十进制 0 ~ 9 有十个数,但是四位的二进制数可以表示 16 个数字,所以有不同的组合方式表示 BCD 码,下表是最常见的几种。
BCD 十进制数码 | 8421 码 | 2421 码 | 5421 码 | 余 3 码 | 余 3 循环码 |
---|---|---|---|---|---|
0 | 0000 | 0000 | 0000 | 0011 | 0010 |
1 | 0001 | 0001 | 0001 | 0100 | 0110 |
2 | 0010 | 0010 | 0010 | 0101 | 0111 |
3 | 0011 | 0011 | 0011 | 0110 | 0101 |
4 | 0100 | 0100 | 0100 | 0111 | 0100 |
5 | 0101 | 1011 | 1000 | 1000 | 1100 |
6 | 0110 | 1100 | 1001 | 1001 | 1101 |
7 | 0111 | 1101 | 1010 | 1010 | 1111 |
8 | 1000 | 1110 | 1011 | 1011 | 1110 |
9 | 1001 | 1111 | 1100 | 1100 | 1010 |
8421 码
所谓 8421 就是二进制每一位的权重,这个和不同的进制数没什么区别,很好理解。
唯一的区别在于,BCD 码赋予它不同的意义: ( 1001 ∣ 0011 ) 2 (1001|0011)_{2} (1001∣0011)2 在 BCD 码中表示 93 93 93, 而不是传统的二进制,8421 码四位为一体,最高权重只有 8
2421 码
和 8421 相同,2421 也是每一位的权重不一样,2421 在前 5 个数 0 ~ 4 和 8421 没什么区别,直到表示 5 时,由于第四位的权重时 2,且低权重的位可以表示出 6,则权重为 4 的位会变为零,从低位开始又开始进位。
5421 码
同上
格雷码
格雷码是一种无权吗,也就是每一位的数据都是没有权重的,它有一个特点,就是相邻的两个数据之间只有一个数据位是不同的。这种性质使得他在进行信息传递时的误差降低,是一种可靠性编码。
格雷码的的生成:
-
一位格雷码只有两个代码,0 和 1。
-
n+1 位格雷码 ( n > = 1 ) (n>=1) (n>=1), 有 2 n + 1 2^{n+1} 2n+1 组代码,其中前 2 n 2^n 2n 个代码的最高位是 0,并且将前 n 个格雷码,按顺序排列,后 2 n 2^n 2n 组数据的最高位位 1,并将 n 位格雷码倒序排列。
第二项有点拗口,难理解,其实这是一种递归运算,可以先从最简单的入手,比如我有两位格雷码,那就能表示 4 组数据,前 2 组数据是
00 |
---|
01 |
后两组数据是
11 |
---|
10 |
再增加到3位格雷码,前4组数据
000 |
---|
001 |
011 |
010 |
后四组数据
110 |
---|
111 |
101 |
100 |
格雷码和二进制码的转换
- 二进制转格雷码
- 格雷码的最高位(最左边)与二进制码的最高位相同
- 从左到右,逐一将二进制码相邻的两位相加,舍去进位,作为格雷码的下一位
例:
(
11011
)
2
(11011)_{2}
(11011)2转格雷码
- 格雷码转二进制码
- 二进制码最高位与格雷码最高位一致
- 将翻译过的二进制码与下一位格雷码相加,舍去进位,得到二进制下一位
例:将格雷码(10110)转换为二进制