进制转换:

二转十:

  1. x= int("100111",2)
  2. # 要用字符串

十转二:

  1. x = bin(5)
  2. # 可以不用字符串

常用位运算:

还是查表块啊。

右移 x >> 1 去掉最后一位
左移 x << 1 在最后加一个0
在最后加一个1 x << 1+1 左移+1
把最后一位变成1 x | 1
把最后一位变成0 x | 1 -1 或 -1
最后一位取反 x ^ 1 XOR
把右数第k位变成1 x | (1 << (k-1)) (101001->101101,k=3)
把右数第k位变成0 x & ~(1 << (k-1)) (101101->101001,k=3)
右数第k位取反 x ^ (1 << (k-1)) (101001->101101,k=3)
取末三位 x & 7 (1101101->101)
取末k位  x & (1 << k-1) (1101101->1101,k=5)
取右数第k位 (x >> (k-1)) & 1 (1101101->1,k=4)
把末k位变成1 x | (1 << k-1) (101001->101111,k=4)
末k位取反 x ^ (1 << k-1) (101001->100110,k=4)
把右边连续的1变成0 x & (x+1) (100101111->100100000)
把右起第一个0变成1 x | (x+1) (100101111->100111111)
把右边连续的0变成1 x | (x-1) (11011000->11011111)
取右边连续的1 (x ^ (x+1)) >> 1 (100101111->1111)
去掉右起第一个1的左边 x & (x ^ (x-1)) (100101000->1000) 
最右边的一个1变为0 x & (x - 1) (101100->101000) 
获取最右边的1 x & (-x ) (110->10)
将正数变成负数,负数变成正数 ~x+1