不确定“与”运算

Isa*_*aOG 3 python operands

我遇到了一段代码来计算十进制所需的二进制位数。

nbits = 1 + (decimal and floor(log2(decimal)))
Run Code Online (Sandbox Code Playgroud)

据我了解,1+floor(log2(decimal))返回的数量是nbits.

但是我不确定该and声明在这里确保了什么。

che*_*ner 10

它利用了0错误值这一事实;这是一个紧凑的形式

bits = 1 + (0 if decimal == 0 else floor(log2(decimal)))
Run Code Online (Sandbox Code Playgroud)

甚至不那么紧凑,

if decimal == 0:
    bits = 1  # 1 + 0
else:
    bits = 1 + floor(log2(decimal)))
Run Code Online (Sandbox Code Playgroud)

floor(log2(0))未定义,需要decimal == 0特殊处理。

x and y == y对于 的任何真值x,并且x and y == xy根本不进行评估)对于假值。

简而言之,它表示bits至少为 1 位 ( 0),但可能需要额外的位来表示非零值。