首页 > 解决方案 > 不确定“和”操作

问题描述

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

nbits = 1 + (decimal and floor(log2(decimal)))

我知道1+floor(log2(decimal))返回的数量nbits

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

标签: pythonoperands

解决方案


它利用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),但对于非零值可能需要额外的位。


推荐阅读