如何在Ruby中将负整数转换为二进制

时间:2016-06-29 04:59:49

标签: ruby binary integer type-conversion

问题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的二进制数是“00101101 00110011”。

"11111111111111111111111111111101""00101101 00110011"之间的区别是什么?

2 个答案:

答案 0 :(得分:9)

包装然后解压缩会将-3转换为4294967293(2 32 - 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"

答案 1 :(得分:1)

尝试:

sudo ldconfig

注意:这仅适用于负数。