セットビットのcharとindexを受け取り、そのビットを含む1の文字列を分離する関数を考え出す必要があります。
すなわち
char isolate(unsigned char arg, int i);
例えば:
Isolate(221,2)は28を返します(11011101 >>> 00011100)
Isolate(221,6)は192(11011101 >>> 1100000)を返します
ルックアップテーブルは、〜256 * 8 = 2048エントリを必要とするため、扱いにくいソリューションのようです。
インデックスの左右にある個々のビットを調べることを考えています。
char isolate(char arg, int i)
{
char result=0;
char mask = 1<<i;
for(char mask = 1<<i; arg & mask != 0; mask>>=1)
result |= mask;
for(char mask = 1<<i; arg & mask != 0; mask<<=1)
result |= mask;
return result;
}
しかし、それも少し醜いようです。どうすればこれよりもうまくいくことができますか?