BCD(Binary-Coded Decimal)
BCD码, 即二进制编码的十进制码, 是一种用二进制数字来表示十进制数字的方法. 它不是真正的二进制数, 而是将每一位十进制数字用特定的二进制代码来表示.
核心思想: 将一个十进制数按位分割, 每一位分别用二进制代码来表示.
常见的BCD码种类:
- 8421 BCD码: 这是最常用的一种BCD码, 也称为NBCD (Natural BCD) 码. 它使用4位二进制数来表示一位十进制数, 从 0 到 9. 每一位的权值从高到低分别为 8、4、2、1, 因此称为 8421 BCD码.
- 余3码 (Excess-3 Code): 这种码是在 8421 BCD码的基础上加 3 得到的. 例如, 十进制数 0 用 0011 表示, 1 用 0100 表示, 以此类推. 余3码是一种自补码, 即一个数的余3码的反码是其9的补码.
- 2421 BCD码: 每一位的权值从高到低分别为 2, 4, 2, 1.
- 5421 BCD码: 每一位的权值从高到低分别为 5, 4, 2, 1.
格雷码(Gray Code)
格雷码(Gray Code)是一种二进制编码方式, 其特点是相邻的两个数之间只有一位二进制数不同. 这种特性使得格雷码在多种应用中非常有用, 特别是在需要减少错误或简化逻辑的场合, 如数字通信、电子电路设计、旋转编码器等.
格雷码的特点
- 单步变化:相邻的两个格雷码之间只有一位二进制数不同.
- 循环性:格雷码是循环的, 即最后一个格雷码与第一个格雷码之间也只有一位不同.
- 唯一性:每个格雷码对应唯一的十进制数.
格雷码的生成方法
def generate_gray_code(n):
"""
生成n位格雷码
:param n: 格雷码的位数
:return: 返回n位格雷码的列表
"""
if n == 0:
return ['']
# 递归生成n-1位的格雷码
smaller_gray = generate_gray_code(n - 1)
# 在n-1位格雷码的基础上生成n位格雷码
# 前半部分在最高位加0, 后半部分在最高位加1
gray_code = ['0' + code for code in smaller_gray] + \
['1' + code for code in reversed(smaller_gray)]
return gray_code
# 示例:生成3位格雷码
n = 3
gray_code = generate_gray_code(n)
print(f"{n}位格雷码:")
for code in gray_code:
print(code)
二位Gray码
['00', '01', '11', '10']
三位Gray码
['000', '001', '011', '010', '110', '111', '101', '100']
四位Gray码
['0000', '0001', '0011', '0010', '0110', '0111', '0101', '0100', '1100', '1101', '1111', '1110', '1010', '1011', '1001', '1000']