class Solution { public: int findComplement(int num) { int temp, i=1, j; temp = num; while (temp != 0){ temp /= 2; i *= 2; } j = i - 1 - num; return j; } };
temp/2相当左移,用i来记录左移多少次,乘以多少个2,再减一相当于111….11这样的形式,而取反则是每一位用1减,刚好用111…1111 减去 num 为取反的值。