以前的2的幂

以前的2的幂,第1张

以前的2的幂

这是我当前的解决方案,用于查找任何给定正整数n的两个的下一个和上一个幂,并且是一个确定数字是否为2的幂的小函数。

此实现适用于Ruby。

class Integer  def power_of_two?    (self & (self - 1) == 0)  end  def next_power_of_two    return 1 if self <= 0    val = self    val = val - 1    val = (val >> 1) | val    val = (val >> 2) | val    val = (val >> 4) | val    val = (val >> 8) | val    val = (val >> 16) | val    val = (val >> 32) | val if self.class == Bignum    val = val + 1  end  def prev_power_of_two   return 1 if self <= 0   val = self   val = val - 1   val = (val >> 1) | val   val = (val >> 2) | val   val = (val >> 4) | val   val = (val >> 8) | val   val = (val >> 16) | val   val = (val >> 32) | val if self.class == Bignum   val = val - (val >> 1)  endend

使用示例

10.power_of_two? => false16.power_of_two? => true10.next_power_of_two => 1610.prev_power_of_two => 8

对于前一个2的幂,找到下一个并除以2的速度比上面的方法稍慢。

我不确定Bignums如何运作。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5643333.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存