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且当且仅当x
第i
位和y
第i
位为1时,否则为0。
由于1
是最后一位为1的数字,如果x & 1
的最后一位为1,则x & 1
为1,否则为0。
由于数字的最后一位如果是奇数则为1,如果是偶数则为0,检查x&1
是否为0等同于检查数字是否为偶数。