C中按位求逆运算

问题描述

亲爱的所有 C 程序员:

X = 1 << N; (left shift)

如何从 X 中恢复 N?

谢谢

解决方法

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

for(size_t i=0; i<sizeof(X)*8; i++)
  if(X & (1<<i))
    printf("%d",i);

如果性能很重要,那么您应该制作一个包含所有可能结果的查找表。