Bạn sẽ tự nhiên sử dụng Integer#to_s(2)
, String#to_i(2)
hoặc "%b"
trong chương trình thực, nhưng nếu bạn quan tâm đến cách dịch hoạt động, phương pháp này sẽ tính toán biểu diễn nhị phân của một số nguyên nhất định sử dụng toán tử cơ bản:
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
Để kiểm tra xem nó hoạt động:
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
Khi bạn nói bạn muốn chuyển đổi toán tử toán thành chuỗi nhị phân, bạn có ý nghĩa gì? Sử dụng biểu diễn ASCII được viết bằng nhị phân? – bta
Tôi đoán bạn muốn thực hiện thuật toán Di truyền học phổ biến? :-) – nemesisfixx