异或XOR相关用法

学习内容:

逻辑运算异或XOR的相关知识与实际用法

1、 异或的概念与表示方法
2、 异或运算的二进制加法应用-Simulink
3、异或算法加密与解密的应用-C语言
4、异或算法交换两个整数的应用-C语言


1 异或的概念与表示方法

数字门电路中逻辑关系有:与(AND)、或(OR)、与非(NAND)、或非(NOR)、异或(XOR)、异或非(NXOR)、非(NOT)。 其中异或表示相异为真,相同为假;即只要运算中一方为1,一方为0,则结果为1,否则为0。

  • Matlab:c=xor(a,b)
  • Simulink:
    在这里插入图片描述
    在这里插入图片描述
  • C语言:c=a^b
  • 真值表如下表所示:
abc
000
101
011
110
  • XOR满足交换律和结合律:
(a xor b) xor c = a xor (b xor c);
(a xor b) xor b = a; %自己是自己的逆,因为b xor b=0

2 异或运算的二进制加法应用

  • 门电路中常被用于二进制加法器上,二进制加法的结果是分为加法位进位位。需要先理解计算机中二进制加法原理,首先计算不用进位的位置,做“或”运算(加法位);然后计算进位的位置做“与”运算(进位位),将进位的结果向左移位,再和加法位相加,按递归下去得到最终结果。

  • 当只有两个一位二进制相加时,可以使用半加器(按位异或),即实现两个1位二进制数相加不考虑低位的进位;当有多个一位二进制数相加,就需要考虑前一位是否有进位,相当于要考虑三个变量,加数、被加数、低位的进位,称为全加器 (两个半加器级联)。

全加器: Simulink例子【参考其他博客,增加理解】

  • 通过全加器来模拟二进制加法原理,给出两个二进制数A、B,Ci为外部进位输入信号,S为输出的和,C0为进位信号。
    在这里插入图片描述
    根据真值表写表达式,s和c0结果为0的不考虑。(注意:这里每一行都是一个单独的数,仍属于1位二进制数
    在这里插入图片描述
    ,只看s为1的四行即可,0为非,1为真。
    在这里插入图片描述
    同理只看c0为1的四行。

  • 搭建Simulink模型如下图:

在这里插入图片描述
其中生成二进制数的脉冲发生器设置如图:
在这里插入图片描述

  • 仿真结果如下图:

在这里插入图片描述
多位二进制数加法

  • 最低位时是两个数的最低位相加,无需考虑进位,是半加器;其余各位都是三个数相加(加数、被加数、进位数)。所以多位加法器可以通过多个上述的一位加法器级联而来,参考网上4位串行加法器使用4个全加器级联。
    在这里插入图片描述
    对于多位二进制数,我的理解是每次运算进行的位数,如2位二进制最多运算2位,11+11;4位最多运算4位,1111+1111。1为高电平,0为低电平;2位加法器,00,01,10,11表示低低、低高、高低、高高。

  • Simulink模型搭建一个2位加法器,可以通过1个半加器存放每个低位的结果,低位的进位给下方高位全加器作为进位输入,参考理解该博主的文章《MATLAB之Simulink(四)两位二进制数加法器》,其中有错误,正确模型如下:
    在这里插入图片描述
    第一个加数Scope(低位在上,高位在下):
    在这里插入图片描述
    第二个被加数Scope:
    在这里插入图片描述
    第三个最终Scope:
    在这里插入图片描述


3 异或算法加密与解密的应用-C语言

加密和解密原理就是XOR是本身的逆运算,代码理解参考下方:

  • https://blog.csdn.net/monster663/article/details/107295825
  • https://blog.csdn.net/monster663/article/details/107142732

4 异或算法交换两个整数的应用-C语言

交换两个整数a、b有三种方法:

  • 临时变量c过渡;
  • 加减法 a=a+b;b=a-b;a=a-b
  • 异或法,可以避免越界缺陷,计算速度也快
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
#include <stdio.h>

void main()
{
	int a=3,b=4;

	 a=a^b;
	 printf("first value %d\n",a);

	 b=b^a;
	 printf("second value %d\n",b);

	 a=a^b;
	 printf("third value %d\n",a);

}

在这里插入图片描述

### XNOR 和 XOR 的定义 XOR异或)是一种二元逻辑运算,其结果为真仅当两个输入不相同时。而 XNOR(同或),也称为 NXOR,在功能上是对 XOR 结果取反的操作。具体来说,XNOR 运算的结果为真仅当两个输入相同[^1]。 #### 定义对比 - **XOR**: 输出为 `True` 当且仅当两个输入不同。 - **XNOR**: 输出为 `True` 当且仅当两个输入相同。 可以用布尔表达式描述如下: - 对于 XOR:\( A \oplus B = (A \land \neg B) \lor (\neg A \land B) \) - 对于 XNOR:\( A \odot B = \neg(A \oplus B) = (A \land B) \lor (\neg A \land \neg B) \)[^3] --- ### 实现方式 在硬件实现方面,可以利用基本的逻辑门来构建这两种操作: 对于 XOR,可以通过以下组合逻辑实现: ```c #define XOR(a, b) ((a) && !(b)) || (!(a) && (b)) ``` 而对于 XNOR,则可以直接通过按位异或后再取反的方式实现: ```c #define NXOR(a, b) (~(a ^ b)) ``` 上述代码片段展示了如何基于 C 语言语法实现这两个逻辑操作[^3]。 --- ### 应用场景分析 两种逻辑运算的应用领域广泛存在于计算机科学和电子工程中,主要体现在以下几个方面: #### 数据校验 - **XOR** 常用于数据传输中的奇偶校验码计算。它能够快速检测单比特错误的存在与否。 - **XNOR**, 虽然较少单独作为校验手段,但在某些特定场合下可用于验证一致性条件,比如同步信号匹配判断等情形[^4]。 #### 加密解密技术 加密过程中经常涉及复杂的数学变换,其中就包括简单的位级操作如 XOR/XNOR 来混淆原始消息内容。由于这些基础运算速度快而且易于逆向还原(即再次施加相同的运算是自反性的),所以非常适合用来设计轻量级密码方案[^2]。 #### 控制系统设计 在数字电路的设计里,工程师们会依据需求选用合适的逻辑组件连接起来完成预定目标。例如比较器内部可能就会运用到大量的比较子单元——它们本质上就是由若干层嵌套而成的各种复合型逻辑门阵列构成;这其中自然少不了像 XOR 或者 XNOR 这样的成员参与进来共同协作达成最终目的。 --- ### 总结表格 | 特性 | XOR | XNOR | |--------------|------------------------------|-----------------------------| | 符号表示 | \( A \oplus B \) | \( A \odot B \) | | 功能说明 | 输入不同的时候返回 true | 输入相同时候返回 true | | 使用案例 | 数据校验、简单加密 | 同步信号匹配 | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值