异或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
- 真值表如下表所示:
| 0 | 0 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 1 | 1 | 0 |
- XOR滿足交換律和結合律:
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;
總結
- 上一篇: buuctf 逆向 xor
- 下一篇: XOR 加密简介