異或是個非常有意思的東西,利用異或的性質我們可以做一些有意思的事情。
異或加密解密
下面是乙個非常簡單的加密解密函式
public static string encryption(string srcstring, char key)
return new string(srcchars);
}
給出測試**:
string password = encryption("eascs", 't');
system.out.println("password = " + password);
string src = encryption(password, 't');
system.out.println("src = " + src);
然後列印的結果如下:
接著大家可能會發現乙個問題,就是我們的password沒有資料,但是我們恢復源資料卻又是正確的,其實我們猜也可以猜的出來,肯定是生成了那些無法顯示的字元,為了驗證這個觀點,我們還是進行一下除錯,下面是除錯的結果截圖:
這裡就可以很清楚的說明了。
異或交換
估計這個功能用到的應該很少吧,其實這才是今天的重點,我們知道交換的方式有很多種,其中最常見的就是:
int a = 100;
int b = 200;
int c = a;
a = b;
b = c;
print("a = " + a + ", b = " + b);
列印結果:
交換成功了,這種方式是我們最常用的。
當然對於int型別的資料交換,我們還有一中方法,這種方法不會借用額外的變數:
a = a + b; // a = 300, b = 200
b = a - b; // a = 300, b = 100
a = a - b; // a = 200, b = 100
同樣的,我們也可以得到交換後的結果,不過這種方法是有侷限的,如果當a + b > integer.max_value時,這個地方是有問題的。
好了扯了這麼多,下面我們來介紹使用xor方式來進行交換:
a ^= b; // a = a ^ b, b = b
b = a ^ b; // a = a ^ b, b = a
a = a ^ b; // a = b, b = a
看了**,其實這個有點類似上面我們介紹的加法交換,總結規律就是:
1. 讓某個值(a)等於這兩個值經過某種運算(#)後的結合值(a = a # b),此時有乙個值(b)是保持不變的。
2. 讓保持不變的值(b)通過結合值(a)與保持不變的值(b)經過某種運算(*)後,使b的值變成a的值。
3. 同理,由於b已經變成了a的值,那麼再經過運算(*)後,便可以使得a的值變為b的值。
寫這麼多其實還不如看**,慢慢理解來的直接,只不過一般文章都有個總結,那就加了個。
XOR 異或的性質與應用總結
下面的內容均來自於網路的收集和彙總。異或的實質是按位模2加,簡單理解就是不進製加法如 1 1 1 1 0 1 0 1 0 1 0 0 0 0 0 按位模2加 101 110 111 100 101 110111 322 2 100交換律 a b b a 結合律 a b c a b c a b c 恒...
有趣的異或
描述這是乙個有趣的題,給你n個數,聰明的大家都知道從中挑出k個數的方案數是多少?ps 當然不會考你這麼簡單的題 現在我們按照如下規則產生a k 1.從n個數中挑出k個數 2.將這k個數作異或運算 s a1 a2 ak 3.將每一種可能的方案產生的s求和 輸入 多組測試資料,以eof結束程式。每組測試...
加密101 異或(xor)
異或 xor 是邏輯運算子,符號是 當輸入同時為真或同時為假時,輸出為假。否則,輸出為真。xor可以叫做 可程式設計反向器 乙個輸入bit位決定要不要對另乙個輸入bit位取反。異或 xor 操作的圖示如上,在圖示左邊pi是明文文字 plaintext 的bit位,i是bit位的索引,因為我們要處理不...