2010-11-06 14 views
8

मैं PragProg से एक metaprogramming वीडियो देख रहा था, और डेव थॉमस कोड के इस स्निपेट से पता चला है:रूबी: स्निपेट क्या करता है: (num और 1) == 0 बिल्कुल करते हैं?

module Math 
    class << self 
    def is_even?(num) 
     (num & 1) == 0 # What exactly is going on here? Particularly (num & 1) 
    end 
    end 
end 

puts Math.is_even? 1 # => false 
puts Math.is_even? 2 # => true 

अब मैं समझता हूँ यहाँ क्या हो रहा है, लेकिन मैं नहीं जानता कि वास्तव में क्या (num & 1) भाग के साथ क्या हो रहा है Math.is_even? कक्षा विधि का। मुझे पता है कि यह थोड़ा सा ऑपरेशन है लेकिन यह इसके बारे में है। क्या कोई मुझे बता सकता है कि कोड की उस पंक्ति के साथ क्या चल रहा है? धन्यवाद।

उत्तर

13

& थोड़ा सा और ऑपरेटर है। (num & 1) करना जांचता है कि संख्या का अंतिम बिट (कम से कम महत्वपूर्ण बिट) सेट है या नहीं। यदि यह सेट है, तो संख्या अजीब है, और यदि यह सेट नहीं है, तो यह भी है।

यह जांचने का एक तेज़ तरीका है कि कोई संख्या भी अजीब है या नहीं। http://www.techotopia.com/index.php/Ruby_Operators#Ruby_Bitwise_Operators

18

यह थोड़ा चाल है: कि है 0 करने के लिए कम से कम अभिप्रायपूण सा भी और अजीब है अन्यथा हर द्विआधारी संख्या

आप गहरे लाल रंग का बिटवाइज़ ऑपरेटर्स यहाँ की एक सूची देख सकते हैं। ऐसा इसलिए है क्योंकि दो की शक्तियां 1,2,4,8,16,... हैं, तो क्या होता है कि जब आप थोड़ा सा करते हैं और 1 के साथ आप 0 प्राप्त करते हैं तो कम से कम महत्वपूर्ण बिट 0 और 1 अन्यथा होता है। तो आप आसानी से पहचान सकते हैं कि अगर ऐसा करने से भी कोई संख्या।

बेशक यह काम करता है सिर्फ इसलिए कि सीपीयू में प्रयोग किया जाता गणित बाइनरी है, अन्यथा यह सिर्फ बकवास होगा ..

सिर्फ एक उदाहरण

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

viceversa

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

x & y है एक संख्या जहां सभी ii वें बिट 1 है और केवल तभी iका थोड़ा साऔर iy का वें बिट 1 और 0 अन्यथा हैं।

चूंकि 1 वह नंबर है जहां केवल अंतिम बिट 1, x & 1 1 है यदि x का अंतिम बिट 1 और 0 अन्यथा है।

चूंकि यह संख्या का अंतिम बिट 1 है, यदि यह अजीब और 0 है, तो यह भी जांच कर रहा है कि x&1 0 यह जांचने के बराबर है कि कोई संख्या भी है या नहीं।

संबंधित मुद्दे