算法題:一個N字節的數,如何逆序排列各個位(bit)?例如1字節的數 0010 0011 => 1100 0100

一個簡簡單單的題,若是用Java,C++,C估計還挺麻煩的,大致思路就是,開闢個N字節空間,用移位掩碼方法逆向給每一個bit賦值,這裏因爲N可能比較大,還得記錄些額外的邊界信息。spa

 

用Erlang則會簡單不少:code

-module(bitoperator).
-export([bit_reverse/1]).

bit_reverse(Bin) ->
            L = [X || <<X:1>> <= Bin],
            Lr = lists:reverse(L),
            Br = list_to_binary(Lr),
            << <<X:1>> || <<X:8>> <= Br >>.

思路是,先把bit變成0,1的大小爲1個byte的數(如同Java裏頭的byte變量),而後逆序排列,而後順序取最低位從新組成結果。blog

相關文章
相關標籤/搜索