关于二进制的几个tips

  1. 一个二进制数,长度为n,并且都是1,十进制就等于2^n-1,例如,1111=15=2^4-1
  2. 一个二进制数,左移一位相当于乘以2,右移一位相当于除以2,例如,3<<1=6,3>>1=1
  3. 对于一个二进制数,所有位置求反,等同于,构造一个相等长度且都是1的二进制数,求异或,例如20=10100,31=2^5-1=11111,10100 xor 11111=01011=11(如果要不变,只需要构造0)
  4. 对于一个二进制数,除了第一个位置其他位置求反,等同于,构造一个少一位长度且都是1的二进制数,求异或,例如20=10100,2^4-1=15=1111,10100 xor 1111=11011=27
  5. 对于一个二进制数,除了第一和第二个位置其他位置求反,等同于,构造一个少两位长度且都是1的二进制数,求异或,例如20=10100,2^3-1=7=111,10100 xor 111=10011=19
  6. 对于一个长度为m的二进制数a,所有位置求反得到b,a+b=2^m-1,例如,20=10100,11=01011,20+11=10100+01011=11111=2^5-1=31
  7. 对于一个长度为m的二进制数a,除第一个位置其他位置求反得到b,a+b=2^m+2^(m-1)-1,例如,20=10100,27=11011,20+27=10100+11011=101111=100000+1111=2^5+2^4-1
  8. 对于一个二进制数a,判断有多少个1,只需要a&(a-1),就可以去掉最右边1个1,循环直到==0

发表评论

邮箱地址不会被公开。 必填项已用*标注