POJ 2453 强大的位运算

POJ 2453 强大的位运算

这个是说 给你一个数 找出比他大的最小的一个数 满足二进制中1的个数和他相同

看到了一个人写的很强大的位运算代码

#include <stdio.h>
int main()
{
    int n,x;
    while(scanf("%d",&n),n)
    {
        x=n&-n;
        printf("%d\n",n+x+(n^n+x)/x/4);
    }
}

x呢 是最后一个1出现的
n+x 是从后往前第一个01转化为10
n^n+x/x/4就是把所有后面的1后移了

Orz阿Orz。。。。。。

你可能感兴趣的:(POJ 2453 强大的位运算)