Ruby:片段是什么:(num&1)== 0究竟是做什么的?

我正在观看来自PragProg的元编程video,Dave Thomas展示了这段代码:

module Math class < false puts Math.is_even? 2 # => true 

现在我明白了这里发生了什么,但我不知道Math.is_even?(num & 1)部分究竟发生了什么Math.is_even? 类方法。 我知道这是一个按位操作,但这是关于它。 有人可以向我解释这行代码的用途吗? 谢谢。

&是一个按位AND运算符。 执行(num & 1)检查数字的最后一位(最低有效位)是否已设置。 如果设置,则数字为奇数,如果未设置,则为偶数。

这只是检查数字是偶数还是奇数的快速方法。

你可以在这里看到一个ruby位运算符列表: http : //www.techotopia.com/index.php/Ruby_Operators#Ruby_Bitwise_Operators

这是一个小技巧:具有最小有效位为0的每个二进制数都是偶数和奇数。 这是因为2的幂是1,2,4,8,16,...所以会发生的是,当你按1和1时,如果最小有效位为0则获得0,否则为1。 因此,即使通过这样做,您也可以轻松识别是否有数字。

当然这只是因为CPU中使用的算法是二进制的,否则它只是废话..

只是一个例子

 161 = 10100001 & 1 = 00000001 -------------- 00000001 -> odd 

反之亦然

 84 = 01010100 & 1 = 00000001 -------------- 00000000 -> even 

x & y是一个数字,其中对于所有i当第i位为1且当且仅当xi位和yi位为1时,否则为0。

由于1是最后一位为1的数字,如果x & 1的最后一位为1,则x & 1为1,否则为0。

由于数字的最后一位如果是奇数则为1,如果是偶数则为0,检查x&1是否为0等同于检查数字是否为偶数。