Re: [心得] Bitwise parallel
原文恕刪~
這份筆記寫得很好~本來要問的都有了~但....才疏學淺,看不懂
小弟也許觀念錯很大~請大家不吝指教~~
: 假設給定一個32bit無號整數,如果以byte為單位切成四份,求這四份的數字總合。
: 範例 0x09ABCDEF -> 0x09 + 0xAB + 0xCD + 0xEF
: 直覺的方法就是
: x & 0xFF + (x&0xFF00 >> 8) + (x&0xFF0000 >> 16) + (x&0xFF000000 >> 24)
x& 0xFF
假設 x 01010101 ----------------32bits
& 11111111 000000000000000032bits
---------------------------------------這樣可以取到前8bits沒錯
x&0xFF00 >> 8
x 01010101 10101010 ---------------
& 11111111 00000000 ---------------
------------------------------------------------
01010101 00000000
>> 00000000 01010101
這樣不也是只取到前8bits,沒記錯的話「&」和「>>」不是優先順序一樣,
所以會由左而右計算,但如果改成 x & (0xFF00 >> 8)是不是比較正確
0xFF00 11111111 00000000
>> 00000000 11111111
x 01010101 10101010
------------------------------------------
00000000 10101010 取到第9~16位元
: 同樣的技巧,也可以用來做把整數中的bit反轉的動作
: (簡單的實作需要16次的交換)
: x = ((x >> 1) & 0x55555555) | ((x & 0x55555555) << 1);
: x = ((x >> 2) & 0x33333333) | ((x & 0x33333333) << 2);
: x = ((x >> 4) & 0x0F0F0F0F) | ((x & 0x0F0F0F0F) << 4);
: x = ((x >> 8) & 0x00FF00FF) | ((x & 0x00FF00FF) << 8);
: x = ( x >> 16 ) | ( x << 16);
哇~~這完全看不懂~還畫了32bits跟著照做~結果算到腦袋發空~
可否麻煩好心人士解釋一下原理~萬分感謝~
--
阿嬤說:「人生不是得到,就是學到。」
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.187.52.246
討論串 (同標題文章)