例如:如同二進制值1010然後經過交換一對位的位置值0101如何交換位位置值12 34 56 78?
回答
unsigned char swapped = ((original & 85) << 1) | ((original & 170) >> 1);
int pairwise_bit_swap(int a) {
return ((a & 0x55555555L) << 1) | ((a & 0xAAAAAAAAL) >> 1);
}
+1。非常簡單的代碼使用合理清晰的技術。作爲一個可移植性筆記,有些編譯器可能會使用具有足夠大範圍的int,以致該代碼將導致int被截斷。 – Brian 2010-08-03 13:38:22
注意右移一個有符號的整數會傳播符號位。這意味着如果a是負數,結果的第一位將是1,而不管第二位! 我懷疑你想要unsigned int(也就是說,你對bit模式感興趣,而不是它們在2的補碼中表示的值)。如果你確實需要一個int,你可以簡單地將它強制轉換爲: ((a&0x55555555)<< 1)| ((((unsigned int)a)&0xAAAAAAAA)>> 1) 或「手動」清除它: ((a&0x55555555)<< 1)| (((a&0xAAAAAAAA)>> 1)&0x7FFFFFFF) – 2010-08-03 15:31:11
還要注意,這隻會在32位int上工作。如果int是64位,那麼你把L放在最後是沒有幫助的! – 2010-08-03 15:32:09
如果ü希望交換奇數位置比特到偶數位置(像互換對位1 2,3 4,5 6,7 8)
無符號字符A,X,Y,Z ;
a = 2 + 4 + 8 + 128;
x = a & 170;
y = a & 85;
z =(x >> 1)|(y < < 1);
Z是答案。
同樣我們可以交換16位等等。請制定出以上示例場景......
((x << 1) & 0xAAAAAAAA) |((x >>1) & 0x55555555)
其中x中的數字。
- 1. 交換位置
- 2. '23/02/2011 12:34:56'無效日期和時間
- 3. 交換DIV位置
- 4. 如何在特定位置隨機交換形狀的位置
- 5. 將12位顏色值轉換爲8位顏色值C++
- 6. 如何交換tr與jquery的位置
- 7. 如何交換WordPress和店鋪位置
- 8. 如何交換HTML標籤的位置?
- 9. 交換位置(爪哇)
- 10. Emacs的交換行位置
- 11. jQuery - 交換元素位置
- 12. 交換位置用C
- 13. 交換位置UIViews Xcode
- 14. 拖放交換div位置
- 15. 如何生成像素值爲1-12的隨機位置?
- 16. 交換位
- 17. 交換html/css按鈕的位置
- 18. 將12位int轉換爲16位或32位
- 19. 交換16位值的前8位和後8位
- 20. 如何爲pyzmq設置ZeroMQ交換文件位置?
- 21. Xcode 5.1,交換位置的幾個UILabels
- 22. 交換清單項目的位置
- 23. 收音機交換位置 - Android java
- 24. Android手機之間的位置交換
- 25. Radiogroup在recyclerview中交換位置
- 26. java swing GroupLayout - 組件交換位置
- 27. 兩個視圖的交換位置
- 28. 交換陣列按鍵位置
- 29. 交換位置UIImageViews第二次Xcode
- 30. 在數組中交換位置
你想要的結果是87654321或21436587? – 2010-08-03 13:17:29