2011-08-18 5 views
5

में थोड़ा निकालें मुझे रूबी में हस्ताक्षर या हस्ताक्षरित, एक इंटीजर का एन-थ बिट प्राप्त करने की आवश्यकता है।रूबी इंटीग्रर्स

x = 123 # that is 1111011 
n = 2 # bit 2 is ...0 

कोड का निम्न भाग सामान्य स्थिति में काम नहीं करता:

x.to_s(2)[-(n+1)] #0 good! but... 
क्योंकि 2-पूरक के रूप में प्रतिनिधित्व नहीं ऋणात्मक संख्याओं की

:

-123.to_s(2) # "-1111011" 

तो कैसे आगे बढ़ना है ?

उत्तर

12
x = 123 # that is 1111011 
n = 2 # bit 2 is ...0 

x[n] # => 0 

-123[2] # => 1 
+0

परिणाम 1 और 0 उलटा हुआ है। मैंने सफलता के बिना अपनी पोस्ट को संपादित करने की कोशिश की – JCLL

+0

@ जेसीएलएल: धन्यवाद! यह एक ऐसा मामला है जहां कट और पेस्ट वास्तव में * एक बग को रोक दिया जाएगा :-) –

+4

हे, फिर भी एक और ठंडा रूबी ऑपरेटर: [] फिक्सनम पर, किसी भी तरह से दोनों दस्तावेज़ों में दिन के रूप में एक ही समय में दृष्टि से बाहर दफनाया गया। – DigitalRoss

4
def f x, bit 
    (x & 1 << bit) > 0 ? 1 : 0 
end 
+0

और यदि आप सिर्फ एक सच्चे/झूठे परिणाम चाहते हैं तो आप 'छोड़ सकते हैं? 1: 0' – DigitalRoss

3

आप Bindata lib को आजमा सकते हैं।

एक स्ट्रिंग के रूप में एक पूर्णांक के बाइनरी प्रतिनिधित्व का प्रतिनिधित्व करने के लिए एक फ़ंक्शन है, और इसके बाद, आप जो भी पसंद कर सकते हैं वह कर सकते हैं।