我需要想出一个函数,它需要一个字符和一个设置位的索引,并隔离一个包含该位的 1 字符串。
IE
char isolate(unsigned char arg, int i);
例如:
隔离(221,2)将返回 28(11011101 >>> 00011100)
隔离(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;
}
但它也似乎有点难看。我怎么能做得比这更好?