演算法很美第一章 位運算的奇巧淫技

2021-10-02 16:26:00 字數 999 閱讀 8194

知識點:

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就是左移的位數...