Python中整数运算里“&”运算符的作用是什么?
问题拆解与解答
嘿,这个问题挺有意思的!让我一步步帮你理清楚:
关于你的列表推导式结果
首先要说明的是:你写的代码 Codx = [num for num in range(1,9) if num & 2 = 0] 在标准Python环境中应该会直接抛出语法错误(SyntaxError: invalid syntax),因为条件判断语句里不能使用普通的赋值运算符 =(只有Python 3.8+支持的海象运算符 := 允许在表达式中赋值,但你的写法也不符合它的规则)。
不过你得到的结果 [1,4,5,8] 完全匹配条件 num & 2 == 0 的筛选结果,所以大概率是你输入时的笔误——把比较运算符 == 写成了赋值运算符 =,才会出现这个结果~
Python中整数的&运算符:按位与
当&和整数搭配使用时,它是**按位与(Bitwise AND)**运算符,具体工作流程如下:
- 将两个整数转换为二进制表示;
- 对两个二进制数的每一位进行"与"操作:只有当两个对应位都为
1时,结果位才是1,否则为0; - 将运算后的二进制结果转换回十进制整数。
用你提到的例子验证:
3 & 2:3的二进制是11,2的二进制是10,按位与后得到10,对应十进制的2,所以结果为2;5 & 2:5的二进制是101,2的二进制是010,按位与后得到000,对应十进制的0,所以结果为0。
再对应你的列表推导式,遍历range(1,9)中的每个数计算num & 2:
- 1 →
001 & 010 = 000→ 0 → 符合==0的条件,被加入列表; - 2 →
010 & 010 = 010→ 2 → 不符合; - 3 →
011 & 010 = 010→ 2 → 不符合; - 4 →
100 & 010 = 000→ 0 → 符合; - 5 →
101 & 010 = 000→ 0 → 符合; - 6 →
110 & 010 = 010→ 2 → 不符合; - 7 →
111 & 010 = 010→ 2 → 不符合; - 8 →
1000 & 0010 = 0000→ 0 → 符合。
最终筛选出的结果就是[1,4,5,8],和你看到的完全一致!
内容的提问来源于stack exchange,提问作者Tade Ogundele
相关产品推荐
相关产品推荐

