Re: [問題] BitSwap
看板C_and_CPP作者guest0079 (SpongeBob SquarePants)時間14年前 (2011/11/16 22:13)推噓0(0推 0噓 3→)留言3則, 3人參與討論串4/5 (看更多)
大概這樣子是最快的吧?↓
unsigned char Bitswap(unsigned char a)
{
int flag;
unsigned char b = 0;
for(flag=1; flag<0x100; flag<<=1)
{
b<<=1;
if(a&flag)
b++;
}
return b;
}
只用到<<, ++, & 及比較運算子,這些都是快速的運算
且只宣告了兩個變數,容易讓編譯器把變數放在暫存器作運算
(可在這兩個變數前面加上register宣告,但迴圈只跑8次作用不大)
如果用查表的方式定義一個char array[256];查表只做一次運算而已,
但是會對記憶體作參照,就算array被放在快取空間,也不會比直接在暫存器處理快
※ 引述《kinding (de)》之銘言:
: 請寫一個char Bitswap(char a) function,也就是
: bit0 <-> bit7
: bit1 <-> bit6
: bit2 <-> bit5
: bit3 <-> bit4 ,舉例來說你輸入0x80 則輸出0x01
: 我的想法是用一個char temp[8];每個元素存一個bit
: 所以將原本的char轉成二進位並存入temp
: 然後用reverse,最後再將陣列的元素轉成數值
: 但是這樣的想法感覺很沒有效率,或許查表可以比較快
: 但是這樣一來要建立255個轉換,有人有高見嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.135.249.125
→
11/16 22:31, , 1F
11/16 22:31, 1F
→
11/16 22:34, , 2F
11/16 22:34, 2F
→
11/16 22:38, , 3F
11/16 22:38, 3F
討論串 (同標題文章)