2016-06-29 47 views
5

Câu hỏi 1: Tôi không thể tìm cách chuyển đổi số nguyên âm sang nhị phân theo cách sau. Tôi phải chuyển đổi nó như thế này.Cách chuyển đổi số nguyên âm sang nhị phân trong Ruby

-3 => "11111111111111111111111111111101" 

tôi đã cố gắng dưới đây:

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. 

Câu hỏi 2: Điều thú vị là, nếu tôi sử dụng chuyển đổi trực tuyến, nó nói với tôi rằng nhị phân của -3 là "00.101.101 00.110.011".

Sự khác nhau giữa "11111111111111111111111111111101""00101101 00110011" là gì?

+0

Bạn chỉ có thể đảo ngược các bit của số dương để đối diện với số – Li357

+2

Vui lòng đặt một câu hỏi cho mỗi bài đăng. – mudasobwa

+2

Ngoài ra, vui lòng làm rõ các quy tắc chuyển đổi; hiện tại tôi không thể nghĩ ra bất kỳ từ nào cho '11111111111101' cho' -3'. – mudasobwa

Trả lời

8

đóng gói sau đó giải nén sẽ chuyển đổi -3 để 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

Tuyệt vời, nó hoạt động! nhưng những gì hiện gói ('L') và giải nén ('L') [0] làm trong trường hợp này? –

+0

@NobyFujioka, Kiểm tra [tài liệu cho 'Mảng # gói'] (http://ruby-doc.org/core/Array.html#method-i-pack) hoặc [' String # unpack'] (http://ruby-doc.org/core/String.html#method-i-unpack). – falsetru

+0

Cảm ơn bạn !! :) –

1

Hãy thử:

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

Lưu ý: này áp dụng cho tiêu cực chỉ mber.

Các vấn đề liên quan