位運算有好多應用,限於篇幅 懶吶 這裡只列舉了一部分,整理好再補充
1.交換兩個數(不需額外變數)
#includeusing namespace std;
int main()
ps:128 :1000 0000
127 :0111 1111
3.判斷乙個數是否為偶數
如果乙個數是偶數,那麼這個數的二進位制數的最後一位為0,和1做與運算結果為0,反之,結果為1.
if(n & 1 )
多數時候判斷奇偶性的**如下:
if(!(n % 2))
但是位運算更快
4.找出不重複的數今天的重頭戲
x ^ y ^ y = x;
經過一段時間的緊張籌備,電腦小組的「rp餐廳」終於開業了,這天,經理lxc接到了乙個定餐大單,可把大家樂壞了!員工們齊心協力按要求準備好了**正準備派送時,突然碰到乙個棘手的問題,筷子!cx小朋友找出了餐廳中所有的筷子,但遺憾的是這些筷子長短不一,而我們都知道筷子需要長度一樣的才能組成一雙,更麻煩的是cx找出來的這些筷子數量為奇數,但是巧合的是,這些筷子中只有乙隻筷子是落單的,其餘都成雙,善良的你,可以幫cx找出這只落單的筷子的長度嗎?
輸入格式
第一行讀入乙個數n,它代表cx找到的筷子的根數。
第二行是n個用空格隔開的數,代表筷子的長度。
輸出格式
一行,落單的筷子的長度。
輸入輸出樣例
輸入 #1
92 2 1 3 3 3 2 3 1
輸出 #1
說明/提示
對於60%的資料,n<=100001;
對於100%的資料,n<=10000001,筷子長度不大於 10^9。
記憶體限制4mb
分析:首先可以發現記憶體限制,所以最簡單直接的桶排就不太友好,而這題如果用位運算的話,完全不用擔心記憶體問題啦。話不多說,上**。
#includeint main()
std::cout《說明:
你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,3,2]
輸出: 3
示例 2:
輸入: [0,1,0,1,0,1,99]
輸出: 99
#includeint x, sum, a[32];
int main()
}for(int i = 0; i < 32; ++i)
}printf("%d",sum);
}
這一天學校組織了乙個遊戲,找找誰才是倒霉蛋。
題目描述
分別讓n個人每個人都拿乙個號碼a[i] (i < n && a[i] < 2^31),每兩個人之間相互看號碼,如果號碼相同的話就可以一起出去,否則還必須接著看其他人的,這個遊戲保證最後1個人或者2個留下來。
輸入格式
第一行兩個數 n,k (n≤3000000,1≤k≤2),n表示參加遊戲的人數,接下來 n行每行乙個正整數表示遊戲上每乙個人的密碼,k表示最後留在遊戲的人數。
輸出格式
從小到大輸出一行 k個數,表示最後留在遊戲裡的倒霉蛋,中間用空格分隔.
輸入輸出樣例
輸入 #1
3 12 2 2
輸出 #1
#includeusing namespace std;
const int n = 3e6 + 6;
int a[n];
int re[2];
int main()
cout<>a[i];;
t ^= a[i];
}t &= -t;
for(int i = 1; i <= n; ++i) else
}if(re[0] > re[1]) swap(re[0], re[1]);
cout<}
return 0;
}
一些工作中常用的小手段
conda 在實驗室的伺服器上安裝conda 這裡要注意實驗室的伺服器上本來是有conda的,但應該每乙個使用者自己安乙個,這樣別人就不會進到你建立的虛擬環境中,這個教程非常棒!批量匯出包含環境中所有元件的requirements.txt檔案 conda list e requirements.tx...
位運算(1) 初識位運算
前段時間數電課學了些進製轉換,還有與或非等邏輯運算,如今再來看看位運算,倒輕鬆了不少。很早就想寫些非總結性部落格了,奈何還是太懶。也也不知怎的突然又來了興致,趕忙寫下這篇部落格。廢話不多說,今天準備總結總結關於位運算的知識。程式中的所有數在計算機記憶體中都是以二進位制的形式儲存的,即0 1兩種狀態,...
位運算子和位運算
一 按位與 運算子 1 運算規則 參加運算的兩個 資料,按二進位進行 與 運算,如果兩個相應的二進位都為1,則該位的結果值為1,否則為0,即 0 0 0,0 1 0,1 0 0,1 1 1.2 用途 1 清零 運算物件 原來的數中為1的位,新數中相應位為0。2 取乙個數中某些指定位。如想要取乙個整數...