Естественно, вы бы использовали Integer#to_s(2)
, String#to_i(2)
или "%b"
в реальной программе, но, если вас интересует, как работает перевод, этот метод вычисляет двоичное представление заданного целого числа, используя основные операторы:
def int_to_binary(x)
p = 0
two_p = 0
output = ""
while two_p * 2 <= x do
two_p = 2 ** p
output << ((two_p & x == two_p) ? "1" : "0")
p += 1
end
#Reverse output to match the endianness of %b
output.reverse
end
Для проверки работоспособности:
1.upto(1000) do |n|
built_in, custom = ("%b" % n), int_to_binary(n)
if built_in != custom
puts "I expected #{built_in} but got #{custom}!"
exit 1
end
puts custom
end