位运算————数字的补数
说明:
前导零位,就是最左边的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 };