&运算符的应用

基础知识:

0b 2进制
0x 16进制
0d 8进制

以前我老是不懂&是干嘛的,我只知道是位运算,但是为什么&之后可以作为if的判断条件?if的判断条件不是true 或者false, 或者0表示false,其他的数字都表示true吗。

今天看别人使用&,才懂得了,&是干什么的。


例子:
同事写了一个python的自动化,然后配置参数如下:

# 功能参数配置 # 0b00000001: 执行签名并备份 apk 和 mapping 文件 # 0b00000010: 执行 FTP 上传 # 0b00000100: 执行禅道项目创建 # 0b00001000:执行邮件发送

如果你配置的是 0b00000001 的话,就会执行签名并备份 apk 和 mapping 文件,以此类推。

代码里面怎么实现的呢?

# Sign apk and download the signed apk to backup path
if config.func_options & 0b0001:
    log.info("APK on Signing...")
    sign_and_sec()
    config.mapping_backup_path = backup_file(config.mapping_path, config.mapping_name)
    log.info("APK Signed.")
else:
    return
# Push signed apk to ftp server
if config.func_options & 0b0010:
    log.info("Signed apk is uploading to FTP Server...")
    ftp_up_file(config.signed_apk_path)
    ftp_up_file(config.mapping_backup_path)
    log.info("Upload finally.")
else:
    return

# Create a version on Chan Dao
if config.func_options & 0b0100:
    create_version_on_can_dao()

# Prepare the mail content for test submit of this apk file from svn commit message, then launch the mail app
if config.func_options & 0b1000:
    mail_for_test_submit()

log.info("Congratulation! R2D2 accomplished all the works successfully!")

可以看到,他会把你配置的拿来去和一个二进制&运算,然后做不同的操作:

if config.func_options & 0b0001:

比如这个吧,因为&运算是这样的:
按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0

所以,我这里除了最后一位,其他位数都是0,也就是,不管你怎么配置其他的位数,跟我没有关系,因为其他位数你怎么配置,&一下,其他位数都是0,结果也就是0,决定config.func_options & 0b0001 是0 或者不是0 的在最后一位,只有你配置了最后一位是1,那么整个表达式才不是0,才会执行这个if下面的所有的操作。

哈哈,以前知道&运算,但是不知道这样用,看别人用,学会了。哈哈,加油。

原文地址:https://www.cnblogs.com/caoxinyu/p/6647723.html