類似下面**中的情況,將整數二進位制中的奇偶位進行互換00
0100
1000
0110
比如:9 的奇偶位互換後得到的結果為 6
實現原理:
1.由於 0 與任何數和與運算的結果都為 0(即消除任何數),而 1 和任何數與運算結果都為任何數本身。
2.故可以先用……0101010101的二進位制數與 整數進行與運算 並儲存運算的值為x,達到保留奇數字,消除偶數字的效果。
3.反之再用1010101010……的二進位制數與 整數進行與運算並儲存運算的值為y,達到保留偶數字,消除奇數字的效果。
4.最後再將儲存的值 x, y 進行錯位:令儲存奇數字的 x 左移一位,儲存偶數字的 y 右移一位;最後再進行異或運算,求得結果即為 原整數奇偶位互換的結果。
(注意:哪邊為偶數字、哪邊為奇數字僅由選取的起點決定,本質上只是相隔位進行互換)
#include
using namespace std;
intmain()
測試結果如圖所示:
1.**中的 0x 表示十六進製制數,十六進製制是逢十六進一;
2.也就是可以用0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f表示個位,其中 a 表示十進位制中的10,而十進位制逢十進一 等同於 二進位制逢二進一;
3.故 可用0xaaaaaaaa表示1010101010……
而0x55555555表示0101010101……
演算法 鴿巢排序
鴿巢排序,名字很生動形象,其實就是把待排序的陣列中相同的元素扔到同乙個鴿巢。洛谷1177 排序 題目描述 將讀入的 n 個數從小到大排序後輸出。輸入格式 第 1 行為乙個正整數 n。第 2 行包含 n 個空格隔開的正整數 a i 為你需要進行排序的數,資料保證了a i 不超過10 9。輸出格式 將給...
鴿巢原理(初識)(純演算法)
一.什麼是 鴿巢原理 抽屜原理 若把n個物體放在n 1個抽屜中,至少有乙個抽屜中放了兩個物體。二.特點 只能用於解決存在性問題 三.例題 例一 在邊長為1的三角形放5個點,至少有兩個點之間的距離 1 2 解析 將乙個三角形分為4個三角形,在四個三角形中放5個點,則至少有兩個點在同乙個三角形中,這兩個...
鴿巢原理小結
最基礎的原理便是n 1的物體放到n個盒子裡,至少有乙個盒子放了兩個物體。poj 2356 有n個數,從中選出幾個數的和是n的倍數。不得不說數學是個神奇的東西,結論是任意的n個數,必然能找到連續的m個數之和是n的倍數。接下來簡單證明一下,組合數學書中,黑書都有介紹。sk表示a1 a2 ak,如果sk是...