python位运算
1, 概念
2, 用途
2.1,判断奇偶
a&10 相当于a%20
1&1,1&3,1&2,1&4
# output : (1, 1, 0, 0)
2.2清零
0&1,0&3,0&2,0&4
# output (0, 0, 0, 0)
2.3 取指定位
ex: 取x=1010 0110得低3位,则需要找一个数n=0000 0111, 令n的低3位为1,其余为0,则x&y=1010 0110
n=int('00000111',2)
x=int('10100110',2)
x&n,bin(x&n)
# output (6, '0b110')
2.4 将特定位置设定为1
ex: 将x=1010 0110的低4位全部设为1,只需要另一个数n=0000 1111的低4位为1,其余为0,用符号’|'即可得到
n=int('00001111',2)
x=int('10100110',2)
bin(x|n)
# output = '0b10101111'
2.5 ‘^’的规律:
- 交换律: x^ y=y^x
2, 结合律: (x^ y)^c=x ^(y ^ c)
3, 对于任何数x,都有 x^ x=0,x^0=x
4, 自反性: a^ b ^ b=a^0=a;
2.6 x与0异或值不变, 与自己异或为0
x^ x=0,x^0=x
2.7 翻转指定位
ex: X=1010 1110 的低4位进行翻转,只需要另找一个数Y=0000 1111,,然后将X与Y进行异或运算(X^Y=1010 0001)即可得到。
n=int('00001111',2)
x=int('10100110',2)
bin(x^n)
# output : '0b1010 1001'
2.8 x>>i = x / (2^ i); x<<i =x*(2^i)
32<<3 # 256
3, 补充bin()和int(str/int,base)
bin() 把一个数转换成二进制,以0b开头
oct()把一个数转换成八进制,以0o开头
hex()把一个数转换成16进制,以0x开头
int()默认base=10,如果指定base,则第一个数是str,如果不指定base,则第一个数是int
int('1111',2) # 15 若 x 为 str,则 base 可略可有
int(8) # 8
# int(8,10)#若 x 为纯数字,则不能有 base 参数,否则报错