首頁>Club>
8
回覆列表
  • 1 # 大鼻子熊哥的VLOG

    大家好我是創業熊哥,我來回答異或作用之前先來了解一下什麼叫異或:異或英文為exclusive OR,或縮寫成xor,異或(xor)是一個數學運算子。它應用於邏輯運算。異或的數學符為“⊕”,計算機符號為“xor”。其運演算法則為:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。

    1.異或的作用如下:

    在計算機中普遍運用,異或(xor)的邏輯符號一般用xor,也有用⊕的:

    真⊕假=真

    假⊕真=真

    假⊕假=假

    真⊕真=假

    或者為:

    True ⊕ False = True

    False ⊕ True = True

    False ⊕ False = False

    True ⊕ True = False

    2.起記憶體保護作用。比如Microsoft Visual Studio你加了如下開關/GS會自動加上如上類似的操作。我們可以認為是一種安全cookie比如如下:char buffer[5];strcpy(buffer, "0123456");會有問題。但是有了/GS這種功能後會自動加上如下的程式碼:mov eax, dword ptr ds:___sec_cookie ; 某個固定的值xor eax, ebp ; 調整指標mov [ebp+SOMETHING], eax ; 儲存處理過的結果這樣就不容易出現安全漏洞。比如在以前我們可以利用strcpy給程式碼注入一段可執行程式碼,現在就杜絕掉了。具體可以查詢visual studio的/GS開關。

  • 2 # 氚思琶醍

    異或是二進位制運算子,用xor表示,若兩個二進位制位相同,則結果為0,不同為1。例若a=110,b=010,則c=a xor b=100.

  • 3 # Qi朱哥說

    與,或,非,同或,異或..最基本的邏輯。

    異或,英文為exclusive OR,縮寫成xor異或(xor)是一個數學運算子。它應用於邏輯運算。異或的數學符號為“⊕”,計算機符號為“xor”。

    參與運算的兩個值,如果兩個相應bit位相同,則結果為0,否則為1。

    即:

      0^0 = 0,

    1^0 = 1,

    0^1 = 1,

    1^1 = 0

    按位異或的3個特點:

    (1) 0^0=0,0^1=1 0異或任何數=任何數

    (2) 1^0=1,1^1=0 1異或任何數-任何數取反

    (3) 任何數異或自己=把自己置0

    按位異或的幾個常見用途:

    (1) 使某些特定的位翻轉

    (2) 實現兩個值的交換,而不必使用臨時變數。

    (3) 在組合語言中經常用於將變數置零:

    (4) 快速判斷兩個值是否相等

    5 應用通式

    就是加密啊解密啊

  • 4 # 淘麥麥電商部落

    看了你的問題,我覺得我應該能幫助到你,所以我整理了以下這些邏輯告訴你異或有什麼用,希望可以幫助到您。舉個簡單的例子的話,它可以用來交換兩個變數的值。當然它的應用也很廣泛,不只是這樣子簡單的用法。下面我具體說一下從其他的角度異或(xor)有什麼作用。

    首先,({true,false}, xor)同構於({0,1},+),其實就是模二加群( )的加法:(看圖一)

    其次,異或其實就是邏輯中不等號(!=,<>;)的表達形式。

    最後,因為異或的特性(交換律、結合律),產生了一個有趣的事情:

    A xor B = C

    A xor B xor B = C xor B = A

    也就說

    A xor B = C

    C xor B = A

    對應了對合變換。

    於是異或其實有些亂七八糟的小應用,比如:

    1、交換兩個數:

    procedure swap(var a,b:integer);

    begin

    a := a xor b;

    b := a xor b;

    a := a xor b;

    end;

    2、讀入1..n中的n-1個數,輸出少掉的那個:

    program ex(input,output);

    var n,x,i,ans,real_ans:integer;

    begin

    readln(n);

    ans := n;

    real_ans := 0;

    for i := 1 to n-1 do

    begin

    read(x);

    ans := ans xor i;

    real_ans := real_ans xor x;

    end;

    writeln(ans xor real_ans);

    end.

    3、一串數字,除了某個數x外每個數都出現偶數次,但是x只出現了奇數次,找出x:

    program ex(input,output);

    var x,ans:integer;

    begin

    ans := 0;

    while not(eoln()) do

    begin

    read(x);

    ans := ans xor x;

    end;

    writeln(ans);

    end.

    【異或】是一個重要的邏輯運算,

    公式為:a^b=(a&~b)|(~a&b)

    具體到位運算,相同位異或得0,不同位異或得1。異或有幾個重要的運算規律,對某些特殊的運算有奇效。

    歸零律:a^a = 0

    交換律:a^b=b^a

    結合律:a^b^c=(a^b)^c=(a^b)^c

    由a^b=(a&~b)|(~a&b)公式,還可得到,

    當b=全1時,a^b=(a&全0)|(~a&全1)=~a,此時【異或】相當於對a取反。

    當b=全0時,a^b=(a&全1)|(~a&全0)=a,此時【異或】結果就等於a。

    由歸零律,可以用異或交的兩個不同位置的變數x,y:

    y=x^y,此時y=x^y,x值不變;

    x=y^x,此時x=(x^y)^x=y,y=x^y;

    y=y^x,此時y=(x^y)^y=x,x=y,交換完畢;

    其實計算機只能識別0和1,然後就是我們程式設計所涉及到的運算,如加減乘除等,在計算機底層都是轉換成二進位制來進行運算的。所以很有必要學習一下計算機的位運算。並且,我在配圖裡給您分享了常見的常見位運算的經典問題,其實位運算的應用遠遠不止這些,在演算法方面適當的使用還是很有幫助的。

  • 中秋節和大豐收的關聯?
  • 你們喜歡一個人會很難受嗎?為什麼?