C中按位的反转操作

Invert operation for bitwise in C

亲爱的所有 C 程序员:

X = 1 << N; (left shift)

如何从 X 中恢复 N?

谢谢

在一个while循环中,一直右移直到X==1,记录你要右移多少次,计数器会给出N。

int var = X;
int count = 0;
while (var != 1){
    var >>= 1; 
    count++;
}
printf("N is %d", count);

试试这个(flsl from here 可从 string.h on macOS 获得):

int flsl(long mask)
{
    int bit;

    if (mask == 0) return (0);
    for (bit = 1; mask != 1; bit++)
        mask = (unsigned long)mask >> 1;
    return (bit);
}

unsigned char binlog(long mask) { return mask ? flsl(mask) - 1 : 0; }

int x = 1 << 20;
printf("%d\n", binlog(x)); ===> 20

N 在这种情况下是您在 1 处移动的位位置。假设 X 这里只设置了一位。然后要找出该位位置对应的数字,您必须使用按位 AND:

遍历数据和掩码
for(size_t i=0; i<sizeof(X)*8; i++)
  if(X & (1<<i))
    printf("%d", i);

如果性能很重要,那么您可以使用所有可能的结果进行查找 table。