我遇到了一段代码来计算十进制所需的二进制位数。
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 == x(y根本不进行评估)对于假值。
简而言之,它表示bits至少为 1 位 ( 0),但可能需要额外的位来表示非零值。
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |