如何交換乙個整形數的二進位制表示的其中兩位.
比如要把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...