当我使用按位与运算符(&
)和数字1来判断一个数x是奇数还是偶数(x & 1)
时,解释器是否会根据x的二进制表示改变数字1的二进制表示?例如:
- 2 & 1 -> 10 & 01 -> 然后执行按位比较
- 5 & 1 -> 101 & 001 -> 然后执行按位比较
- 100 & 1 -> 1100100 & 0000001 -> 然后执行按位比较
它是否会在数字1的二进制表示中添加零以执行按位与操作?
查看cpython实现,它似乎根据右侧参数的大小比较数字。因此,在这种情况下,上面的例子实际上是有效的:
- 2 & 1 -> 10 & 1 -> 0 & 1 -> 然后进行按位比较
- 5 & 1 -> 101 & 1 -> 1 & 1 -> 然后进行按位比较
- 100 & 1 -> 1100100 & 1 -> 0 & 1 -> 然后进行按位比较
我的理解正确吗?我有点困惑,因为来自Geeks for Geeks的this image。
1
和0000001
是相同的,前导零不会改变二进制位所表示的实际值。因此,您展示的Cython计算并不完全符合您描述的5&1-> 101&1-> 1&1
。实际上应该是5&1-> 101&001-> 001-> 1
。但这是相同的东西。 - Akshay Sehgal100 + 1
变成200
,因此需要将数字处理为与零填充相同的方式。这并不意味着你要将1
改为001
,它只是表示1
就是1
,无论与它一起使用的其他操作数是什么。 - Charles Duffy