非,与,或,异或

本文详细介绍了逻辑门的基本概念,包括非、与、或、异或等逻辑运算的真值表及其电路实现方式,并探讨了这些逻辑运算所遵循的重要规律如交换律、结合律、互补律等。

一.非(\bar{A})

   非就是相反的.

"\bar{A}"的真值表
A\bar{A}
10
0

电路图:


二.与(A\cdot B)

  A与B就是只有A,B同时为1,结果才为1(下表粉色所示),其余为0.

"A\cdot B=R"的真值表
ABR
000
100
010
111

由上图中蓝色可见:

与遵守 1.交换律  A\cdot B= B\cdot A

另外与还遵守

2.结合律  (A\cdot B) \cdot C = A\cdot(B \cdot C)

3.互补律 A\cdot\bar{A} = 0

4.幂等律 A \cdot A = A

5.狄摩根定律 \overline{(A\cdot B)} = \bar{A}\cdot \bar{B}

 电路图:

 

 

 

 三.或(A+B)

   A或B只有A,B同时为0,结果才为0(下表粉色所示),否则为1;

"A + B = S"的真值表
ABR
000
011
101
111

同样上图中蓝色可见

"或"也遵守 1.交换律  A+B=B+A

2. 结合律  A+(B+C)=(A+B)+C

3.互补律  A+\bar{A}=1

4.幂等律  A+A=A

5.狄摩根定律  \overline{ (A+B)}=\bar{A}+\bar{B}

以上"或"的运算规律可与"与"的对比

 除此之外,"与"和"或"还遵守如下规律:

1.吸收律  A·(A+B)=A  和 A+A·B=A

证明 A·(A+B)=A
ABS
111
101
010
000

 A始终等于S

证明A+A·B=A
ABS
111
101
010
000

 A始终等于S

2.分配律  A·(B+C)=A·B+A·C  和  A+ (B·C)=(A+B)·(A+C)

A·(B+C)=R
ABCR
0000
0010
0100
0110
1000
1011
1101
1111
A·B+A·C=R
ABCR
0000
0010
0100
0110
1000
1011
1101
1111

所以   A·(B+C)=A·B+A·

(A+B)\cdot (A+C)

=A\cdot (A+C)+B\cdot (A+C)

=A+B\cdot A+B\cdot C

=A + B\cdot C

3.  重叠律 A+\bar{A}\cdot B=A+B= B+\bar{B}\cdot A

(A + \bar{A}\cdot B)(A + B)

=A\cdot A + A\cdot \bar{A}\cdot B + A\cdot B + \bar{A}\cdot B\cdot B

=A+0+A\cdot B+\bar{A}\cdot B

=\left\{\begin{matrix} A + \bar{A}\cdot B\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\\ A + B\cdot (A+\bar{A})=A+B \end{matrix}\right.

同理 A+B= B+\bar{B}\cdot A

 电路图: 

 

四.异或

  我们先列出异或的真值表

 

异或的真值表
ABR
000
101
011
110

找其中R = 1 行(图中绿色)

把这里的A和B写成逻辑与,如果是0写成"非"

A\cdot \bar{B} , \bar{A}\cdot B

再把它们逻辑或连接

得R = A\cdot \bar{B} + \bar{A}\cdot B

电路图:

 

 

 

其实上图中的或门可以去掉,直接将两电路并联.

### C++ 中异或运算符的使用方法 #### 1. **按位 (`&`)** 按位运算符 `&` 对两个操作数的每一位执行逻辑 AND 操作。如果对应的两位都为 1,则结果为 1;否则为 0。 示例代码如下: ```cpp int a = 0b1010; // 十进制表示为 10 int b = 0b0110; // 十进制表示为 6 cout << (a & b) << endl; // 输出 2,因为二进制计算结果为 0b0010 ``` 解释: 对于上述例子,`a` 和 `b` 的二进制形式分别为 `1010` 和 `0110`。逐位进行运算后得到 `0010`,即十进制下的 2[^3]。 --- #### 2. **按位 (`|`)** 按位运算符 `|` 对两个操作数的每一位执行逻辑 OR 操作。只要其中一位为 1,则结果为 1;只有当两者均为 0 时,结果才为 0。 示例代码如下: ```cpp int a = 0b1010; // 十进制表示为 10 int b = 0b0110; // 十进制表示为 6 cout << (a | b) << endl; // 输出 14,因为二进制计算结果为 0b1110 ``` 解释: 在此情况下,`a` 和 `b` 的二进制形式分别是 `1010` 和 `0110`。逐位进行运算后得到 `1110`,即十进制下的 14。 --- #### 3. **按位 (`~`)** 按位运算符 `~` 是一种单目运算符,它对操作数的每一位取反。即将所有的 1 转换为 0,所有的 0 转换为 1。 需要注意的是,在补码系统中,负数是以其绝对值的补码形式存储的。因此,应用按位运算可能会导致意想不到的结果。 示例代码如下: ```cpp int a = 0b0010; // 十进制表示为 2 cout << (~a) << endl; // 输出 -3,因为在补码系统下 ~2 表示 -(2+1) ``` 解释: 假设变量 `a` 存储的内容是 `0010`(即十进制的 2)。对其应用按位运算会将其转换为 `-3`,这是由于计算机内部采用补码机制来表达负数值。 --- #### 4. **按位异或 (`^`)** 按位异或运算符 `^` 对两个操作数的每一位执行 XOR 操作。如果对应位置上的比特不同,则该位置上返回 1;否则返回 0。 示例代码如下: ```cpp int a = 0b1010; // 十进制表示为 10 int b = 0b0110; // 十进制表示为 6 cout << (a ^ b) << endl; // 输出 12,因为二进制计算结果为 0b1100 ``` 解释: 这里,`a` 和 `b` 的二进制形式分别被设定为 `1010` 和 `0110`。通过逐位对比发现它们之间存在差异的位置会被置为 1,最终得出结果 `1100`,也就是十进制下的 12[^5]。 --- ### 总结表格 | 运算符 | 描述 | 示例 | 结果 | |--------|--------------------------|-----------------------|------| | `&` | 按位 | `1010 & 0110` | `0010` | | `|` | 按位 | `1010 | 0110` | `1110` | | `~` | 按位 | `~0010` | `-3` | | `^` | 按位异或 | `1010 ^ 0110` | `1100` | 以上便是 C++ 中四种基本位运算符的功能及其具体实现方式[^1][^2]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值