不确定 '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),但对于非零值可能需要额外的位。