逻辑运算小结1---和X拥有的1的个数相同,但是比X大的第一个数的求解方法

来源:互联网 发布:知我者其为春秋乎 编辑:程序博客网 时间:2024/06/12 01:14
#include <iostream>using namespace std;//和X拥有的1的个数相同,但是比X大的第一个数的求解方法:unsigned snoob(unsigned x)    //举例:  X = 0000 1111 00000{    unsigned smallest, ripple, ones;        // x = 0000 1111 0000    smallest = x & -x;                     // 0000 0001 0000    ripple = x + smallest;                // 0001 0000 0000    ones = x ^ ripple;                   // 0001 1111 0000    ones = (ones >> 2) / smallest;      // 0000 0000 0111    return ripple | ones;               // xxx1 0000 0111}int main(){    unsigned  int x;    cin>>x;    cout<<snoob(x)<<endl;    return 0;}

0 0