不确定 'and' 操作
Unsure about an 'and' operation
我遇到了一段代码来计算小数点所需的二进制位数。
nbits = 1 + (decimal and floor(log2(decimal)))
我明白1+floor(log2(decimal))
returns的人数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
),但对于非零值可能需要额外的位。
我遇到了一段代码来计算小数点所需的二进制位数。
nbits = 1 + (decimal and floor(log2(decimal)))
我明白1+floor(log2(decimal))
returns的人数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
),但对于非零值可能需要额外的位。