数字逻辑学习笔记01

数字逻辑学习笔记01

exdoubled Lv2

学习笔记01

定义

简单的二进制数不再赘述

定义 1.1 各种十进制码

BCD 码(用二进制编码十进制数)

BCD 码是十进制数而不是二进制数

:

BCD 码的加法,像正常二进制做加法,若产生无效位,只需在无效位加上 0110 (加6)就得到正确的 BCD 码和一个进位,负数使用 BCD 的补码

8421码

十进制数 BCD码(8421码)
0 0000
1 0001
2 0010
3 0011
4 0100
5 0101
6 0110
7 0111
8 1000
9 1001

2421码

十进制数 2421码
0 0000
1 0001
2 0010
3 0011
4 0100
5 1011
6 1100
7 1101
8 1110
9 1111

余3码 (其实就是8421码加上0011)

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

84-2-1码

十进制数 84-2-1码
0 0000
1 0111
2 0110
3 0101
4 0100
5 1011
6 1010
7 1001
8 1000
9 1111

2421 码和余 3 码和84-2-1码都是自补码,特性是其十进制数的反码通过将该码中的 0,1 互换直接得到,也就是说09、82、73、64互为反码

BCD 码不是自补码


定义 1.2 格雷码

格雷码的优点相比二进制数是从上一个数转换到下一个数时只有一位发生变换

格雷码

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

下面给出一个二进制数如何转换为格雷码

对二进制数 ,最高位补位 ,从高位依次向低位做异或ans[i]=buffer[i]^buffer[i+1] 得到 ,格雷码转二进制先把首位放下来,从高位向低位交叉做异或,ans[i]=buffer[i]^ans[i+1]

Test

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
vector<int> Decimal(n);
vector<int> Gray(n);


// 二进制转格雷码
vector<int> GraytoDecimal(vector<int>& Decimal){
int n = Decimal.size();
vector<int> Gray(n);
Gray[0] = Decimal[0];
for(int i = 1; i < n; ++i) Gray[i] = Decimal[i-1] ^ Decimal[i];
return Gray;

// 格雷码转二进制
vector<int> GraytoDecimal(vector<int>& Gray){
int n = Gray.size();
vector<int> Decimal(n);
Decimal[0] = Gray[0];
for(int i = 1; i < n; ++i) Decimal[i] = Decimal[i-1] ^ Gray[i];
return Decimal;
}

定义 1.3 奇偶校验码

在 码组 中增加一位,指使整个码组具有奇数个 1 或者偶数个 1 的信息

只具有发现出现奇数个错误的能力,无错误定位、纠正错误的能力。

偶校验 奇校验
1000001 01000001 11000001
1010100 11010100 01010100

定义 1.4 汉明码

汉明码可以纠错一个错误的数字

汉明码是在原来的数据插入 位数据作为校验位,原来 位变为 位 其中位数要满足

这个不等式也叫汉明(Hamming) 不等式,编码规则如下

校验位位于码组索引位 的位置 ,其余数位填数据位

校验位 (位置 )校验 原码位置编号二进制数 位是 的位,满足这一条件的位置的码的值全部异或得到校验值

  • (位置1)覆盖位置1、3、5、7、9…(二进制最低位为1的位)
  • (位置2)覆盖位置2、3、6、7、10…(二进制第二位为1的位)
  • (位置4)覆盖位置4、5、6、7、12…(二进制第三位为1的位)

这里的校验可以为奇校验可以为偶校验

:1011 hamming编码为 0110011

下面给出纠错的步骤

1. 计算校验子(Syndrome)

  • 接收端收到码字后,重新计算每个校验位的奇偶性(与编码时规则相同)。
  • 对于每个校验位 (位置 ),计算其覆盖组(所有位置编号二进制表示第k位为1的位)的异或值(偶校验预期为0)。
  • 若实际异或值不为0,则记录该校验位出错,记为1;否则为0。
  • 将所有校验位的校验结果按顺序( …)组成一个二进制数(校验子S),其十进制值直接指出错误位置(从1开始编号)。

2. 定位错误位

  • 校验子 S 的十进制值即为错误位的位置(若为0则无错误)。
  • 例如:S=101(二进制)表示第5位错误;S=110 表示第6位错误。

示例(接收码字:0110011,假设第5位出错变为0110111)

  1. 计算校验子
    • (覆盖位1,3,5,7):异或位1+3+5+7 = 0⊕1⊕1⊕1=1(应为0,出错→记1)
    • (覆盖位2,3,6,7):异或位2+3+6+7 = 1⊕1⊕1⊕1=0(正确→记0)
    • (覆盖位4,5,6,7):异或位4+5+6+7 = 0⊕1⊕1⊕1=1(应为0,出错→记1)
  2. 校验子 S==101(二进制),十进制值为5。
    ⇒ 错误发生在第5位。
  3. 纠正:翻转第5位(1→0),恢复正确码字

定义1.5 布尔代数

基本结构

布尔代数是一个六元组 ,其中:

  • 是一个非空集合(称为载体集

  • 上的二元运算(分别称为逻辑或逻辑与

  • 上的一元运算(称为逻辑非补运算

  • 中的两个特殊元素(分别称为零元和单位元)(实则一个是 的单位元,一个是 的单位元)

公理系统

布尔代数满足以下公理:

  1. 交换律

  2. 结合律

  3. 分配律

  4. 同一律

  5. 补律

衍生性质

从上述公理可以推导出以下重要性质:

  1. 幂等律(重叠律)

证明: 点击查看证明

$$
\begin{align*}
a+a &= (a+a)\cdot 1 \
&= (a+a)\cdot (a+\overline{a}) \
&= a+a\cdot \overline{a} \
&= a+0 \
&= a

\end{align*}
$$

由上述证明我们知道这两个式子有对偶性,于是以下省略第二个式子的证明

  1. 有界律

证明: 点击查看证明

  1. 吸收律

证明: 点击查看证明

证明:

  1. 对合律(自反律)
证明: 点击查看证明

证明:


由 上述可知, 的补。
但补是唯一的,而 也是 的补(因为 )。

  1. 德摩根律

证明: 点击查看证明

证明 的补元

  1. 消除律

证明: 点击查看证明

所以 的补元
=

示例

最简单的布尔代数是二元布尔代数 ,其中:

  • , , ,
  • , , ,
  • ,

拓展

布尔代数和群的关系

这个二元布尔代数同构于伽罗瓦域

但不是所有布尔代数都同构于域,下面给出

定理:如果布尔代数 是一个域,那么 只能有2个元素。

证明: 点击查看证明

假设 是一个域,那么对于任意 ,存在 使得

但在布尔代数中,有 ,因此:

这说明所有非零元素都等于1,因此:

主要原因是乘法逆元的要求不同

要求:

  • 每个非零元素 都必须存在乘法逆元 ,满足:

布尔代数 中:

  • 对于任意 ,有幂等性:
  • 只有当 时,才有 (即
  • 对于 ,不存在 使得

下面给出反例

设三元布尔代数 ,其中 ,运算规则:

  • 要满足 ,但
  • 不存在这样的 使得

布尔代数和环的关系

每一个布尔代数都可以自然地构成一个环,并且是一种特殊类型的环,称为布尔环。 布尔代数与布尔环是范畴等价的数学结构。

证明: 点击查看证明

下面用 表示上面的 以区分环上的运算

给定布尔代数 ,可定义对应的布尔环

我们定义单位元不变

  • 环加法

  • 环乘法

下面验证环公理

  1. 构成阿贝尔群:

    • 封闭性:
    • 结合律:
    • 交换律:
    • 单位元:
    • 逆元:(每个元素都是自身的加法逆元)
  2. 构成幺半群:

    • 封闭性:
    • 结合律:
    • 单位元:
  3. 分配律:

  4. 特殊性质(布尔环特性)(幂等性):

给定布尔环 (满足 ),可定义对应的布尔代数

我们定义最小元0,最大元1

  • 布尔或:
  • 布尔与:
  • 布尔非:

下面验证布尔代数公理

  • 交换律、结合律、分配律
  • 同一律:
  • 补律:
  • 幂等律:

所以布尔环和布尔代数是等价的