異或演算法規律
⑴ 異或的巧用
與其它語言不同,C語言和C++語言的異或不用xor,而是用「^」,鍵入方式為Shift+6。(而其它語言的「^」一般表示乘方)
若需要交換兩個變數的值,除了通常使用的借用中間變數進行交換外,還可以利用異或,僅使用兩個變數進行交換,如: a=a^b;b=b^a;a=a^b;詳解: a1=a^bb=a1^b=a^b^b=a//此時a1=a^aa=a1^b=a1^(a1^b)=a1^a1^b=b注意: a=a^b^(b=a);//此類形式是不正確的UB行為,在不同編譯器中會有不同的結果,切勿使用這樣就完成了a與b的交換。
綜上:同一變數與另一變數和其異或值異或等於自身。
用例:可使用於加密演算法某一環節或更多環節,使演算法更復雜,不易被破解,安全性更高。
⑵ java中異或是怎樣算的
概述
i = 14,異或演算法轉換二進制,同則取0異則取1;
解析
異或是一種基於二進制的位運算,用符號XOR或者^表示,其運演算法則是對運算符兩側數的每一個進制位同值則取0,異值則取1.
簡單理解就是不進位加法,如1+1=0,0+0=0,1+0=1.
For example:
3^5 = 6
轉成二進制後就是 0011 ^ 0101 二號位和三號位都是異值取1 末尾兩個1同值取零,所以3^5 = 0110 = 6
而 i = 50 ,j = 60;
所以:
i 的二進制 = 00110010
j 的二進制 = 00111100
同位相同取0,不同取1所以得出來的值為00001110
i = i ^ j;所以i = 00001110 = 14
拓展內容
異或運算符
性質
1、交換律
2、結合律(即(a^b)^c == a^(b^c))
3、對於任何數x,都有x^x=0,x^0=x
4、自反性 A XOR B XOR B = A xor 0 = A
異或運算最常見於多項式除法,不過它最重要的性質還是自反性:A XOR B XOR B = A,即對給定的數A,用同樣的運算因子(B)作兩次異或運算後仍得到A本身。這是一個神奇的性質,利用這個性質,可以獲得許多有趣的應用。 例如,所有的程序教科書都會向初學者指出,要交換兩個變數的值,必須要引入一個中間變數。但如果使用異或,就可以節約一個變數的存儲空間: 設有A,B兩個變數,存儲的值分別為a,b,則以下三行表達式將互換他們的值 表達式 (值) :
A=A XOR B (a XOR b)
B=B XOR A (b XOR a XOR b = a)
A=A XOR B (a XOR b XOR a = b)
#code:
⑶ 請幫我講解一下C語言中的異或運算
首先,我們看一下異或的原理:
a = 3 ^ 5;
3的二進制是0011,5的二進制是0101。異或發現兩者的不同之處,所以a最終為0110b(4)。
了解了異或的基本原理後,接下來看上述的代碼。
a^=b;
這一句使得a被賦值為「數值a」與「數值b」的「差異值」。
然後:b^=a;
這一句用異或利用「差異值」來還原a的數值,並賦值給b。此時b等於a先前的數值。
最後一句:a^=b;
因為a仍然保存著「差異值」,這一句通過異或使得b的初始值被還原,並賦值給a。
。。。。。
這樣,異或就將a與b的數值「巧妙」地交換了……
我也是網路的,和樓主一起學習…………
⑷ 異或運算一組數
看你的表示形式應該是16進制數,異或就是按位比較,不一樣的位運算結果就是1,
0000 0001 //01
0010 0000 //20 XOR後 0010 0001
0001 0111 //17 XOR後 0011 0110
0000 0000 //00 XOR後 0011 0110
0000 0011 //03 XOR後 0011 0101
1110 1000 //E8 XOR後 1101 1101 十六進制數就是 DD
所以結果就是DD,事實上你應該寫嚴謹一點,0xDD,以後書寫16進制數都加上前綴0x,希望你喜歡編程
⑸ A⊕B⊕C⊕D怎麼計算
第一、相信你是知道兩個命題變數的異或運算的規則的——只要你知道它的真值表就夠了,其規律是:(兩變數取值)相同則(結果為)假,不同則真;
第二、你應該知道兩個命題變數的異或運算的結果也是一個命題變數,它可以參與下一步的邏輯運算;
第三、多個異或連續運算,就類似數學上的連加、連乘運算:將前兩個數的運算結果,與第三個數繼續運算;再將結果與第四個運算;再……其中的每一步都要按照相應運算的規則進行;
現在,你可以自己進行計算了。不過我曾經對多個變數的異或(和同或)運算的規律做過分析,現將結果告訴你,你可以自行驗證:
1、多個命題(或命題變數)的「異或」運算:其結果依賴於參與運算的所有量中,取值為「真」的量的「個數」的「奇偶性」:
若含「奇數」個「真命題」,則結果為「真」;
若含「偶數」個「真命題」,則結果為「假」;(註:零個也是偶數個)
換句話說:命題表達式 A⊕B⊕C⊕D 結果為「真」,當且僅當 A、B、C、D 中有奇數個(即 1 個或 3 個)變數的取值為「真」;而至於其中「假命題」的個數,則對結果「無任何影響」。關於這一點的證明,可以從下面兩個恆等式中找到思路:
p ⊕ 1 = 非p;——增加一個「真命題」參與運算,總會將「原命題」變成其「反命題」;
p ⊕ 0 = p;——增加一個「假命題」參與運算,對「原命題」永遠沒影響;
2、多個命題(或命題變數)的「同或」運算:其結果依賴於參與運算的所有量中,取值為「假」的量的「個數」的「奇偶性」:
若含「奇數」個「假命題」,則結果為「假」;
若含「偶數」個「假命題」,則結果為「真」;
⑹ c#的異或運算符問題
a=b--和a=--b表達式解析和運算符優先順序,還有--用法的問題
先說解析=是賦值,在解析時,先運算=右面的表達式
右--是先取變數的值,再對變數做自減1操作
左--是先對變數做自減1操作,再取表達式的值
假設b=2,那麼a=b--的意思是先做a=2,再對b減1,結果a=2,b=2
a=--b先對b減1,表達式的值是1,結果a=1,b=2
⑺ 邏輯異或運算是什麼
1、異或(xor)是一個數學運算符。它應用於邏輯運算。
2、異或的數學符號為「⊕」,計算機符號為「xor」。其運演算法則為:a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
3、如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。
4、邏輯異或運算簡稱異或。英文為exclusive OR,或縮寫成xor。
5、異或也叫半加運算,其運演算法則相當於不帶進位的二進制加法:二進制下用1表示真,0表示假,則異或的運演算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進位,所以異或常被認作不進位加法。
(7)異或算法規律擴展閱讀
一、運演算法則
1、a ⊕ a = 0
2、a ⊕ b = b ⊕ a
3、a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;
4、d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.
5、a ⊕ b ⊕ a = b
二、邏輯表達式:F=AB』⊕A』B((AB』⊕A』B)』=AB⊙A』B』,⊙為「同或」運算)
⑻ XOR演算法是什麼
1. xor (異或) ⊕,二進制運算。可逆運算。 1 xor 1=0,0 xor 0=0,1 xor 0=1,0 xor 1=1。 http://ke..com/view/64546.htm
⑼ 請問什麼是異或校驗
異或校驗演算法(又稱為BCC校驗)
下面就是異或校驗的演算法,多用於串口通信:
#include "stdio.h"
void main()
{
int i;
//任意10個數值,也可以不是8位
unsigned char data[10]={0x12,0x21,0x1A,0xB1,0xC1,0xEB,0xDF,0xCA,0xF6,0xDD};
unsigned char out;//用於保存異或結果
out=0x00;
for (i=0;i<sizeof(data);i++)
{
out^=data;
}
printf("原來的校驗值:%X ",out);
out^=(data[0]^0xee);//將data[0]改為新數據後計算新校驗和的方法
out^=(data[5]^0x20);//將data[5]改為新數據後計算新校驗和的方法
printf("修改後校驗值:%X ",out);
data[0]=0xee; //採用原始的方法計算新的校驗和,和前面的校驗和對比是否正確
data[5]=0x20; //採用原始的方法計算新的校驗和,和前面的校驗和對比是否正確
out=0x00;
for (i=0;i<10;i++)
{
out^=data;
}
printf("原始方法得出校驗值:%X ",out);
}
作用:
防止自己的程序被篡改。
有些可執行程序,當被改了資源時再運行會有文件已損壞的提示,這就是使用了數據校驗。本例是用md5做為數據校驗的演算法。當然你可以使用個性化的比如des作為數字簽名,那樣安全性更高。
(9)異或演算法規律擴展閱讀:
最簡單的檢驗
實現方法:最簡單的校驗就是把原始數據和待比較數據直接進行比較,看是否完全一樣這種方法是最安全最准確的。同時也是效率最低的。
應用例子:龍珠cpu在線調試工具bbug.exe。它和龍珠cpu間通訊時,bbug發送一個位元組cpu返回收到的位元組,bbug確認是剛才發送位元組後才繼續發送下一個位元組的。
奇偶校驗Parity Check
實現方法:在數據存儲和傳輸中,位元組中額外增加一個比特位,用來檢驗錯誤。校驗位可以通過數據位異或計算出來。
應用例子:單片機串口通訊有一模式就是8位數據通訊,另加第9位用於放校驗值。
md5校驗和數字簽名
實現方法:主要有md5和des演算法。
適用范圍:數據比較大或要求比較高的場合。如md5用於大量數據、文件校驗,des用於保
密數據的校驗(數字簽名)等等。
應用例子:文件校驗、銀行系統的交易數據
參考資料:網路-數據校驗
⑽ 異或門 的演算法
「異或」XOR 函數當有奇數個輸入變數為真時,輸出為真!
當輸入X=0,Y=0 時 輸出S=0
當輸入X=0,Y=1 時 輸出S=1
0代表假 1代表真
異或門主要用在數字電路的控制中!
異或運算及異或門由邏輯非、邏輯與和邏輯或可以實現異或邏輯運算,即 。式中「 」為異或邏輯運算符號,讀為「異或」。實現異或運算的門電路是異或門,異或門的真值表如表1.13所示,其邏輯符號如圖1.11所示。
二輸入異或邏輯的運算規則是:若兩個輸入變數的邏輯值相同,則它們的異或值為「0」;
若兩個輸入變數的邏輯值不相同,則它們的異或值為「1」。簡言之,「相同則0,相異則1」。
http://www.hsit.e.cn/jingpin/dzjsjc/skja/1.doc