2016-06-29 62 views
5

Domanda 1: Non riesco a trovare un modo per convertire gli interi negativi in ​​binario nel modo seguente. Dovrei convertirlo in questo modo.Come convertire numeri interi negativi in ​​binario in Ruby

-3 => "11111111111111111111111111111101" 

ho cercato qui di seguito:

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. 

Domanda 2: È interessante notare che, se io uso convertitore online, mi dice che binaria del -3 è "00.101.101 00.110.011".

Qual è la differenza tra "11111111111111111111111111111101" e "00101101 00110011"?

+0

È possibile invertire i bit di un numero positivo per ottenere il valore opposto – Li357

+2

Si prega di fare una domanda per ogni post. – mudasobwa

+2

Inoltre, si prega di chiarire le regole di conversione; al momento non riesco a pensare a dare '11111111110101' per '-3'. – mudasobwa

risposta

8

imballaggio poi disimballaggio convertirà -3 a 4294967293 (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

Ottimo, funziona! ma cosa fa pack ('L') e unpack ('L') [0] in questo caso? –

+0

@NobyFujioka, controlla la [documentazione per 'pacchetto matrice #] (http://ruby-doc.org/core/Array.html#method-i-pack) o [' String # unpack'] (http://ruby-doc.org/core/String.html#method-i-unpack). – falsetru

+0

Grazie !! :) –

1

Prova:

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

Nota: Questo vale per nu negativo solo di mber.