python - 不确定“和”操作
问题描述
我遇到了一段代码来计算十进制所需的二进制位数。
nbits = 1 + (decimal and floor(log2(decimal)))
我知道1+floor(log2(decimal))
返回的数量nbits
。
但是,我不确定该and
声明在这里确保了什么。
解决方案
它利用0
了虚假价值这一事实;这是一种紧凑的形式
bits = 1 + (0 if decimal == 0 else floor(log2(decimal)))
甚至不那么紧凑,
if decimal == 0:
bits = 1 # 1 + 0
else:
bits = 1 + floor(log2(decimal)))
floor(log2(0))
是未定义的,所以需要decimal == 0
特殊处理。
x and y == y
对于 , 的任何真实值x
,并且x and y == x
(根本不评估y
)对于虚假值。
简而言之,它表示bits
至少为 1 位 ( 0
),但对于非零值可能需要额外的位。