1 class Solution 2 { 3 public: 4 int findComplement(int num) 5 { 6 return ~num&((1<<(int)log2(num))-1); 7 } 8 };
这个方法很骚,取非之后把前置0的部分全部用&操作置为0.
(1<<(int)log2(num))-1 这个操作可以获得低于num最高位的所有位为1的数字,比如,0000 1010进行此操作后,可以得到0000 0111
1 class Solution 2 { 3 public: 4 int findComplement(int num) 5 { 6 return ~num&((1<<(int)log2(num))-1); 7 } 8 };
这个方法很骚,取非之后把前置0的部分全部用&操作置为0.
(1<<(int)log2(num))-1 这个操作可以获得低于num最高位的所有位为1的数字,比如,0000 1010进行此操作后,可以得到0000 0111