位开启

使用位运算符:按位或

0x00 | 0x02  

# 0b0000 | 0x0010  
# 0b0010  
# 0x02
0x00 | 0x03  

# 0b0000 | 0x0011  
# 0b0011  
# 0x03

位关闭

使用位运算符:按位与和按位取反

0x02 & (~0x02)  

# 0b0010  & (~0b0010)  
# 0b0010 & 0b1101  
# 0000  
# 0x00  
0x03 & (~0x02)  

# 0b0011  & (~0b0010)  
# 0b0011 & 0b1101  
# 0b0001  
# 0x01 

掩码运算

掩码低4位

def f(x):  
    return x & 0xf0 

掩码高4位

def f(x):  
    return x & 0x0f

掩码任意位

def f(x, n):  
   return x & ( ~( 1 << (n - 1) ) )  

掩码任意位数(从右往左)

def f(x, n):  
    return x & ( ~( (1<<n) - 1 ) ) 

def f2(x, n):
    return x & ( ~( 2 * ( 1<<(n - 1) ) - 1 ) )

def f3(x, n):
    n -= 1
    return x & ( ~( (1<<n) + ( (1<<n) - 1) ) )

# 显而易见的f()效率最高,但是f()和f2()在动态语言里会有溢出的情况
# 虽然f3也有溢出,但是至少在运算编译器支持的最大位数时不会有溢出
# 看需要采取f()和f3()函数,f2()一般不需要,只是f()的一种变种