476. 数字的补数

image.png

  1. package main
  2. import "fmt"
  3. func findComplement(num int) int {
  4. i := 1
  5. for i <= num {
  6. i = i<<1
  7. }
  8. return i - num - 1
  9. }
  10. func main() {
  11. fmt.Println(findComplement(5))
  12. }

image.png

1 5的二进制是101 取反就是010 实际上就是101和111的异或运算
2 111的求解过程就是获取5最高为1总位数3的全为1的的过程

  1. func findComplement(num int) int {
  2. tmp := num
  3. n :=1
  4. for tmp>0 {
  5. n=n<<1
  6. tmp=tmp>>1
  7. }
  8. n=n-1
  9. return num^n
  10. }