作者Favonia (小西風最乖了*^^*)
看板C_and_CPP
標題Re: [問題] BitSwap
時間Wed Nov 16 11:38:32 2011
※ 引述《kinding (de)》之銘言:
: → bleed1979:http://0rz.tw/iQKVb stackoverflow上的解。 11/15 05:23
這個問題很有趣,我來畫畫圖好了。
(就不管什麼 char 可能不是 8 bits 之類的鳥事好了)
| unsigned char b; // reverse this (8-bit) byte
| b = (b * 0x0202020202ULL & 0x010884422010ULL) % 1023;
@
http://0rz.tw/iQKVb
b
12345678
0x0202020202ULL
*_______*_______*_______*_______*_
b * 0x0202020202ULL
1234567812345678123456781234567812345678_
0x010884422010ULL
*____*___*____*___*____*___*________*____
(b * 0x0202020202ULL) & 0x010884422010ULL
1____6___2____7___3____8___4________5____
1023
**********
### % 1023
* ------> *
10
((b * 0x0202020202ULL) & 0x010884422010ULL) % 1023
1____6___2____7___3____8___4________5____
1 ------> 1 ------> 1 ------> 1 ------> 1
2 ------> 2 ------> 2 ------> 2
3 ------> 3 ------> 3
4 ------> 4
5
6 ------> 6 ------> 6 ------> 6
7 ------> 7 ------> 7
8 ------> 8
_________________________________87654321
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.39
※ 編輯: Favonia 來自: 140.112.30.39 (11/16 11:39)
推 LPH66:推 11/16 12:31
→ VictorTom:推:) 11/16 23:53