二進位制位交換 反轉 計數

2021-06-01 10:22:55 字數 1084 閱讀 7218

如何交換乙個整形數的二進位制表示的其中兩位.

比如要把a,與b進行交換。那麼方法如下:x表示任意值。

***x ***x ***x xaxx ***x xxbx ***x ***x

分為兩步:

第一步:首先要求得

***x ***x ***x x0xx ***x xx0x ***x ***x

第二步:在第一步的基礎上加上:

0000 0000 0000 0b00 0000 00a0 0000 0000

第一步的**可以寫做:兩位置值表示為x, y。數值表示為v

ret = v & (~(1<

第二步**:

ret = ret | (((v>>y)&1)<>x)&1)<

這裡粘個**

void _swap(unsigned int &v, int x, int y)

看一下對char的處理

unsigned char reversebits(unsigned char ch)

先看看0x55,0x33,0x0f的二進位制

0x55 -> 01010101 b

0x33 -> 00110011 b

0x0f -> 00001111 b

從中可以看出,是先將相連的兩bits對調實現相連2 bits資料翻轉;

接著兩個相連的「2 bits組合」對調實現相連4 bits資料翻轉;

再下來就是將兩個相連的「4 bits組合」對調即可以完成對乙個字元8 bits的翻轉。

對於更多bytes 的資料做同樣的處理。單數個bits呢,這個就需要思考一下了。

如何對整形數計算1的個數

《程式設計之美》上面的**其實並不高效,這裡給個《**之美》中猛的**

int cnt(unsigned int x)

做這個處理有乙個經典的方法,分治策略( divide and conquer strategy ),該方法**於henry s.warren 的《hacker's delight》對reversing bits 的介紹。

二進位制反轉

方法一 利用二進位制數轉化為十進位制數的計算規則來編寫,如下 include include includeunsigned int reverse bit int num return sum int main 這裡的 num i 1意思是依次取這個數二進位制位模式下的最右面的那一位數,一共取32...

python隨機交換二進位制位

最近業餘研究遺傳演算法,交叉演算法採取隨機多點交叉,也就是把兩個數的二進位制位隨機交換,如下 corsser mask 0xfffffffe,0xfffffffd,0xfffffffb,0xfffffff7,0xffffffef,0xffffffdf,0xffffffbf,0xffffff7f,0x...

二進位制數反轉

1 使用了歸併排序的思路 最快 但是時間複雜度比歸併排序要小,每行 都相當於完成了一次歸併 include unsigned revbit unsigned x void main 2 把乙個32位整數按位反轉,即第1位轉到第32位,第2位轉到第31位,依次下去。一牛人寫的演算法如下 unsigne...