日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

异或XOR相关用法

發布時間:2023/12/8 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 异或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);}

總結

以上是生活随笔為你收集整理的异或XOR相关用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。