知識點:
a^a=0
a^0=a(乙個數與0進行按位異或,結果是他自己)
對乙個序列進行按位異或,可以消除掉序列中的重複項,比如:a^a ^b ^c ^c=b(根據第1、2條規則)
對乙個序列補一下,就可以將不重複的元素變成重複的元素,重複的元素變成不重複的,從而可以找到原本序列中重複項。比如原本是 a^b ^c ^c,來互補一下,變成 a ^b ^c ^c ^a ^b ^c=c
使用^,計算機會對每乙個變數的二進位制儲存形式做按位異或。
程式思路:
異或法:
計算式子:題設陣列的每乙個元素依次進行按位異或,所得結果再與1到1000依次進行按位異或,所得結果即為重複項。
暴力法:
使用輔助陣列arr_tag來記錄arr陣列中,1到1000出現的次數,將arr元素的值對應成arr_tag下標,對應的下標對應的元素值為出現的次數。
```c
#include "stdio.h"
#define arr_len 1000
int main()
arr[arr_len] = random;
//異或法求解
int middle = 0;
for (i=0;i
for (i = 0;i<=arr_len;i++)
printf("random= %d\n", middle);
//暴力法進行對拍
int arr_tag[arr_len + 1];
for (i = 0;i
for (i = 0; i < arr_len + 1; i++)
} return 0;
}
位運算的奇巧淫技
1.在處理整形數值時,可以直接對組成整形數值的各個位進行操作。這意味著可以使用遮蔽技術獲得整數中的各個位。2.與 或 異或 非 取反 3.和 運算子將二進位制位進行右移或者左移操作。4.運算子將用0填充高位 運算子用符號位填充高位,沒有 運算子。5.對於int型,1 35與1 3是相同的,而左邊的運...
一 位運算的奇巧淫技
補充 異或,可以理解為不進製加法 1 1 0,0 0 0,1 0 1 性質 1 交換律,可任意交換運算因子的位置,結果不變 2 結合律 即 a b c a b c 3 對於任何數x,都有x x 0,x 0 x 4 自反性a b b a 0 a,連續和同乙個因子做異或運算,最終結果為自己 題1 找出唯...
第一章之位向量和位運算
1.基本的位運算符號 按位與 按位或 運算子兩邊對應位置有一邊為1時,運算結果為1。只有兩邊同時為0時,結果才為0.向右移位 乙個運算元進行右移運算的時候,結果就是等於運算元除以2的n次方,n就是右移的位數 向左移位 乙個運算元進行左移運算的時候,實際上就是等於該運算元乘以2的次方,n就是左移的位數...