gpt4 book ai didi

ruby - "&"如何用于数字比较?

转载 作者:数据小太阳 更新时间:2023-10-29 07:30:06 28 4
gpt4 key购买 nike

def power_of_two?(n)
n & (n-1) == 0
end

此方法检查给定数字 n 是否为 2 的幂。这是如何运作的?我不明白 &

的用法

最佳答案

& 称为按位与运算符。

The AND operator逐位浏览两个提供的整数的二进制表示。如果两个整数中相同位置的位都是 1,则生成的整数会将那个位设置为 1。如果不是,则该位将设置为 0:

(a = 18).to_s(2)     #=> "10010"
(b = 20).to_s(2) #=> "10100"
(a & b).to_s(2) #=> "10000"

如果数字已经是 2 的幂,则减一将导致二进制数只设置了低位位。使用 & 什么都不做。

  • 示例 8:0100 & (0100 - 1) --> (0100 & 0011) --> 0000

要理解它,请遵循“How does this bitwise operation check for a power of 2?”。

通过 IRB 的例子:

>> 4.to_s(2)
=> "100"
>> 3.to_s(2)
=> "11"
>> 4 & 3
=> 0
>>

这就是为什么您可以说 42 的幂 数。

关于ruby - "&"如何用于数字比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27555048/

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