Re: [問題] BitSwap

看板C_and_CPP作者 (SpongeBob SquarePants)時間14年前 (2011/11/16 22:13), 編輯推噓0(003)
留言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
但是你有if..branch prediction miss的時候也可能會慢的
11/16 22:31, 1F

11/16 22:34, , 2F
現在cpu都會對branch預先處理,應該還ok吧
11/16 22:34, 2F

11/16 22:38, , 3F
branch predictor 對這種一下跳一下不跳的最沒轍了
11/16 22:38, 3F
文章代碼(AID): #1EmyJuYo (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
1
9
完整討論串 (本文為第 4 之 5 篇):
問題
1
2
問題
1
9
文章代碼(AID): #1EmyJuYo (C_and_CPP)