异或XOR相关用法
學(xué)習(xí)內(nèi)容:
邏輯運(yùn)算異或XOR的相關(guān)知識(shí)與實(shí)際用法
1、 異或的概念與表示方法
2、 異或運(yùn)算的二進(jìn)制加法應(yīng)用-Simulink
3、異或算法加密與解密的應(yīng)用-C語言
4、異或算法交換兩個(gè)整數(shù)的應(yīng)用-C語言
1 異或的概念與表示方法
數(shù)字門電路中邏輯關(guān)系有:與(AND)、或(OR)、與非(NAND)、或非(NOR)、異或(XOR)、異或非(NXOR)、非(NOT)。 其中異或表示相異為真,相同為假;即只要運(yùn)算中一方為1,一方為0,則結(jié)果為1,否則為0。
- Matlab:c=xor(a,b)
- Simulink:
- C語言:c=a^b
- 真值表如下表所示:
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 1 | 0 |
- XOR滿足交換律和結(jié)合律:
2 異或運(yùn)算的二進(jìn)制加法應(yīng)用
-
門電路中常被用于二進(jìn)制加法器上,二進(jìn)制加法的結(jié)果是分為加法位和進(jìn)位位。需要先理解計(jì)算機(jī)中二進(jìn)制加法原理,首先計(jì)算不用進(jìn)位的位置,做“或”運(yùn)算(加法位);然后計(jì)算進(jìn)位的位置做“與”運(yùn)算(進(jìn)位位),將進(jìn)位的結(jié)果向左移位,再和加法位相加,按遞歸下去得到最終結(jié)果。
-
當(dāng)只有兩個(gè)一位二進(jìn)制相加時(shí),可以使用半加器(按位異或),即實(shí)現(xiàn)兩個(gè)1位二進(jìn)制數(shù)相加不考慮低位的進(jìn)位;當(dāng)有多個(gè)一位二進(jìn)制數(shù)相加,就需要考慮前一位是否有進(jìn)位,相當(dāng)于要考慮三個(gè)變量,加數(shù)、被加數(shù)、低位的進(jìn)位,稱為全加器 (兩個(gè)半加器級(jí)聯(lián))。
全加器: Simulink例子【參考其他博客,增加理解】
-
通過全加器來模擬二進(jìn)制加法原理,給出兩個(gè)二進(jìn)制數(shù)A、B,Ci為外部進(jìn)位輸入信號(hào),S為輸出的和,C0為進(jìn)位信號(hào)。
根據(jù)真值表寫表達(dá)式,s和c0結(jié)果為0的不考慮。(注意:這里每一行都是一個(gè)單獨(dú)的數(shù),仍屬于1位二進(jìn)制數(shù))
,只看s為1的四行即可,0為非,1為真。
同理只看c0為1的四行。 -
搭建Simulink模型如下圖:
其中生成二進(jìn)制數(shù)的脈沖發(fā)生器設(shè)置如圖:
- 仿真結(jié)果如下圖:
多位二進(jìn)制數(shù)加法
-
最低位時(shí)是兩個(gè)數(shù)的最低位相加,無需考慮進(jìn)位,是半加器;其余各位都是三個(gè)數(shù)相加(加數(shù)、被加數(shù)、進(jìn)位數(shù))。所以多位加法器可以通過多個(gè)上述的一位加法器級(jí)聯(lián)而來,參考網(wǎng)上4位串行加法器使用4個(gè)全加器級(jí)聯(lián)。
對(duì)于多位二進(jìn)制數(shù),我的理解是每次運(yùn)算進(jìn)行的位數(shù),如2位二進(jìn)制最多運(yùn)算2位,11+11;4位最多運(yùn)算4位,1111+1111。1為高電平,0為低電平;2位加法器,00,01,10,11表示低低、低高、高低、高高。 -
用Simulink模型搭建一個(gè)2位加法器,可以通過1個(gè)半加器存放每個(gè)低位的結(jié)果,低位的進(jìn)位給下方高位全加器作為進(jìn)位輸入,參考理解該博主的文章《MATLAB之Simulink(四)兩位二進(jìn)制數(shù)加法器》,其中有錯(cuò)誤,正確模型如下:
第一個(gè)加數(shù)Scope(低位在上,高位在下):
第二個(gè)被加數(shù)Scope:
第三個(gè)最終Scope:
3 異或算法加密與解密的應(yīng)用-C語言
加密和解密原理就是XOR是本身的逆運(yùn)算,代碼理解參考下方:
- https://blog.csdn.net/monster663/article/details/107295825
- https://blog.csdn.net/monster663/article/details/107142732
4 異或算法交換兩個(gè)整數(shù)的應(yīng)用-C語言
交換兩個(gè)整數(shù)a、b有三種方法:
- 臨時(shí)變量c過渡;
- 加減法 a=a+b;b=a-b;a=a-b
- 異或法,可以避免越界缺陷,計(jì)算速度也快
a = a ^ b;
b = a ^ b;
a = a ^ b;
總結(jié)
- 上一篇: buuctf 逆向 xor
- 下一篇: XOR 加密简介