我試圖做一點反轉,我理解直接實現,但爲了性能目的,我需要通過構建查找表並使用該表來反轉位以找到位反轉,所以我的程序將建立一個查找表的N位,然後它將使用該表來查找給定位的位反轉。位反轉:爲N位生成位反轉查找表
例如,如果bitSize = 9和num = 6(00000110)
反向(NUM,bitSize)將返回192是11000000
int lookup(int num, int bitSize)
{
return table[bitSize][num]; // == reverse(num,bitSize);
}
我認爲這是查找函數應該如何看起來像,我被告知可以建立表格,但我不知道如何解釋如何建立這個表格?
我只是想澄清,我正在尋找一種方式來建立這個表給出bitSize,不只是爲32位,否則我會用這個方法: http://graphics.stanford.edu/~seander/bithacks.html#BitReverseTable
感謝您
編輯: 這兩種解決方案都能正常工作,但由於j_random_hacker的內存優化,kmkaplan的解決方案效率更高。
是什麼阻止您使用直接執行來生成表?另請注意,32位數字的表格消耗16 GB。 –
居然沒什麼,我也想,我應該使用reverse(num,bitSize)來生成表,但是,我不知道如何生成表,我不太明白表的方法... – Malkavian
bitsize永遠不會超過12位,所以大小不是一個大問題,速度是。 – Malkavian