Digamos que você tenha um número natural e queira primeiro sua representação binária. Podemos conseguir isso em Ruby com a seguinte linha de código:
binary_of_a_number = number.to_s(2).to_i
Assim que obtivermos a representação binária de um número, para obter seu complemento, você pode aplicar um XOR a todos os 1s ou apenas inverter os bits de maneira tradicional como esta –
def get_integer_complement( number )
# convert into binary
binary_n = number.to_s(2)
# save into integer array by splitting
binary_array = binary_n.split("").map(&:to_i)
result_array = []
binary_array.each do |el|
el == 0 ? result_array << 1 : result_array << 0
end
return result_array.join.to_i(2)
end