gpt4 book ai didi

python - 在 Python 中产生 2 次方的按位运算

转载 作者:太空狗 更新时间:2023-10-30 02:44:35 26 4
gpt4 key购买 nike

在纯音调理论(音乐理论的一种)中,音符之间的音程用有理数表示。以 2:1 的比率将频率加倍可将其提升一个 Octave ,而 1:1 的比率则没有变化;齐声。因此,如果我有一个大于 Octave 或小于同音(下降)的音程 n,“证明”它是有用的。也就是说,要使 1 ≤ n ≤ 2。我一直在使用以下函数在 Python 中执行此操作:

def justify(n):
return n / 2 ** floor( log(n,2) )

实际的功能涉及到分数库,但这通过 float 和整数来完成工作。对数找到 2 n 的幂次方,并将其向下舍入,以便生成的除数是 n 以下最接近的 2 次幂。我也试过这个:

def justify(n):
return n / int( '1'.ljust( len( bin(n) ) - 2, '0' ), 2 )

这个只是取二进制表示的长度,并以此为基础补零。当然,这只适用于整数。我想知道是否有任何方法可以通过按位运算来执行此操作。二进制文件似乎很适合 2 操作的强大功能。至少,我希望看到一种用按位替换 2 ** floor( log(n,2) ) 的方法。如果它可以处理 float ,则加分,但我知道那更复杂。

最佳答案

math.frexp(x),正如 Mark Dickinson 在问题评论中指出的那样,是要走的路:

def justify(n):
return 2*frexp(n)[0]

它适用于 float 和整数。

关于python - 在 Python 中产生 2 次方的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28857930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com