位运算————数字的补数

说明:

前导零位,就是最左边的1之前的0全去掉。

方法:

找到num二进制从左往右第一个1到末尾的位数,将c变成相同位数的全1二进制,进行异或得到的就是。

例如:

num  5  101  10->1  1->01  ->101  此时101全都>>出去了,num==0

c     0  0      1<-   11<-        111<- 此时0补充进了三个1,最后将101和111进行异或就行了

 1 class Solution {
 2 public:
 3     int findComplement(int num) {
 4         int tmp=num;
 5         int c=0;
 6         int zero=0;
 7         while(tmp>0){
 8             tmp>>=1;
 9             c=(c<<1) + 1;
10         }
11         return c^num;
12     }
13 };
原文地址:https://www.cnblogs.com/pacino12134/p/11058429.html