【算法】位运算之补数

题目描述:
题解:先找出num的二进制有多少位,然后将1左移n位再减1得到全1二进制;
   例如:5(101)有3位,1<<3 -1= 111,再将5(101)与7(111)异或得到2(010),即补数。
 
Java代码:
class Solution {
    public int findComplement(int num) {
        int bitwei = 0,num1 = num;
        while(num1>0){
            bitwei++;
            num1 /= 2;
        }//统计num 的位数

        //将1左移bitwei位,例如1<<3 = (1000) (1000)-1 = (111)
        int mark = (1<<bitwei) - 1;
        //将5(101)与7(111)异或得2(010)
        return num ^ mark;
    }
}

 

posted @ 2022-07-19 22:43  小李不背锅  阅读(46)  评论(0编辑  收藏  举报