if和bitwise&在同一条线上

时间:2015-04-07 02:08:35

标签: python bitwise-operators

我正在浏览一个开源项目并遇到了这个python方法。我知道&和<<按位运算符可以工作,但我不确定if else语句在这种情况下是如何工作的。我可以说int = 2且position是= 1而if语句的结果是2(10 base 2),但这个if语句比较2到什么?以及如何评估else语句?

 def get_bit(int, position):
    if int & (1 << position):
        return '1'
    else:
        return '0'

2 个答案:

答案 0 :(得分:2)

测试结果是否为假。

在Python中,FalseNone0,空字符串,空列表等等值都是&#34; falsey&#34;,而其他值则是真实的。在这种情况下,它有效地将按位AND的结果与零进行比较。

if (int & (1 << position)) != 0: # same thing

答案 1 :(得分:1)

if语句检查表达式的“真实性”。例如,如果你有:

if some_expression:
    ...

这相当于写作:

if bool(some_expression):
    ...

您不必明确地致电bool(),但如果您愿意,这样做的伤害相对较小。一些程序员认为它风格不好,因为它并不是绝对必要的。

没有必要,因为Python中的每个表达式都具有真实性值。错误的是:

  • False(显然)
  • None
  • 0(作为int,long,float或任何其他数字类型)
  • 空字符串,无论是str还是unicode(区别主要仅存在于Python2.x中)
  • 空列表,元组,集,词典和其他容器类型

自定义类还可以通过实现__nonzero__来声明其真实性。

因此,对于您的特定问题,即使表达式求值为2,也会执行if / else的“if”部分,因为在布尔上下文中任何非零int都将被视为True。 / p>