Python 位运算 & >>

Linux权限系统

100    读 4

10      写 2

01      执行 1

110    可读写 6
101    可读执行 5
11      可写执行 3
111     可读写执行 7

 &  二进制对位 相同返1,否则返0

场景:路由权限

1   0b1 查

2   0b10 增

4   0b100 改

8   0b1000 删

用户   0         黑名单,权限全无

用户   5   0b101       有查,改权限,无添加,删除

用户   7   0b111    有查,增,改权限, 无删除

user = 7
dic = {'GET': 0b1, 'POST': 0b10, 'PUT': 0b100, 'DELETE': 0b1000}


def my_auth(func):
    def wrapper(*args):
        if user & dic[args[0]]:
            func(*args)
        else:
            print(f"{args[0]}没权限")

    return wrapper


@my_auth
def view(name):
    print(f'{name}进入视图')
    pass


view("GET")
view("POST")
view("PUT")
view("DELETE")
打印结果
GET进入视图
POST进入视图
PUT进入视图
DELETE没权限

场景:求奇偶数

偶数&1 得0         奇数&1 得1

2 & 1        0

3 & 1        1

4 & 1        0

5 & 1        1

位移        向右位移 >>        向左位移<<

>>1场景:折半查找

3 >> 1 位移性能高于整除 3 // 2

3 >> 1  3位移一位,相当于3整除2一次,位移2位相当于整除2两次

print(200>>3)       # 200 整除2 整除2 再整除2 结果为25

print(200<<3)       # 200 乘以2 乘以2 再乘以2 结果为1600

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值