请看下面的函数,其中a
是一个无符号字节0-255,b
是一个浮点数:
def convert(a, b):
if a & 0x80:
return -b
return b
如果a的第一位被设置,它将否定b,否则不会发生任何事情。有人可能认为这并不那么酷,因为条件语句会破坏CPU中的分支预测。因此,人们会尝试将其转换为计算。
但是我只找到了这个解决方案,它看起来不太高效:
def convert(a, b):
return (-1)**(a & 0x80) * b
哪种更有效?编译器是否简化了第二个?有更好的方法吗?