476. Number Complement - 最高比特位后取反

来源:互联网 发布:入门单板吉他推荐 知乎 编辑:程序博客网 时间:2024/06/07 01:51

https://leetcode.com/problems/number-complement/

分析

也即把一个数最高比特位后的比特位取反即可,关键要找出最高比特位,简单的位操作,十几分钟搞定,位操作使用还要加强,神技能啊。

实现一

int findComplement(int num) {    int i = 0;    int tmp=0;    int max=0;    for(i=0;i<32;i++)    {        tmp=0x80000000>>i;        if((num &tmp) == tmp)        {            max=i;            break;        }    }    num = ~num;    num &= 0xFFFFFFFF>>max;    return num; }

实现二

int findComplement(int num) {    int tmp = num;    /* 将最高位后面的位都置为1 */      tmp |= (tmp>>1);    tmp |= (tmp>>2);    tmp |= (tmp>>4);    tmp |= (tmp>>8);    tmp |= (tmp>>16);    num = ~num;    num &= tmp;    return num; }
0 0