问题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"
之间的区别是什么?
答案 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
注意:这仅适用于负数。