2016-06-29 7 views
5

में नकारात्मक पूर्णांक को बाइनरी में परिवर्तित करने के लिए कैसे करें प्रश्न 1: मुझे नकारात्मक पूर्णांक को बाइनरी में निम्न तरीके से परिवर्तित करने का कोई तरीका नहीं मिल रहा है। मुझे इसे इस तरह परिवर्तित करना है।रुबी

-3 => "11111111111111111111111111111101" 

मैं नीचे की कोशिश की:

sprintf('%b', -3) => "..101" # .. appears and does not show 111111 bit. 

-3.to_s(2) => "-11" # This just adds - to the binary of the positive integer 3. 

प्रश्न 2: दिलचस्प है, अगर मैं ऑनलाइन कनवर्टर का उपयोग, यह मुझसे कहता है -3 की कि बाइनरी "00,101,101 00,110,011" है।

"11111111111111111111111111111101" और "00101101 00110011" के बीच क्या अंतर है?

+0

आप इसके विपरीत – Li357

+2

के विपरीत एक सकारात्मक संख्या के बिट्स को उलटा कर सकते हैं कृपया प्रति पोस्ट एक प्रश्न पूछें। – mudasobwa

+2

इसके अलावा, कृपया रूपांतरण के नियमों को स्पष्ट करें; वर्तमान में मैं '-3' के लिए '11111111111101' देने' के बारे में नहीं सोच सकता। – mudasobwa

उत्तर

8

तो परिवर्तित कर देंगे -34294967293 को खोल पैकिंग (2 - 3):

[-3].pack('L').unpack('L') 
=> [4294967293] 

sprintf('%b', [-3].pack('L').unpack('L')[0]) 
# => "11111111111111111111111111111101" 

sprintf('%b', [3].pack('L').unpack('L')[0]) 
# => "11" 
+0

बढ़िया, यह काम करता है! लेकिन इस मामले में पैक ('एल') और अनपैक ('एल') [0] क्या करता है? –

+0

@NobyFujioka, [ऐरे # पैक'] के लिए प्रलेखन की जांच करें (http://ruby-doc.org/core/Array.html#method-i-pack) या ['स्ट्रिंग # अनपैक'] (http://ruby-doc.org/core/String.html#method-i-unpack)। – falsetru

+0

धन्यवाद !! :) –

1

प्रयास करें:

> 32.downto(0).map { |n| -3[n] }.join 
#=> "111111111111111111111111111111101 

नोट: इस पर लागू होता है ऋणात्मक एनयू केवल मबर