RedEnginePress logo
RedEnginePress
AlgorithmsLanguagesPlaygroundAbout

Binary Xor Operator

v
p
def binary_xor(x, y)
  raise 'Input must only contain positive integers' if (x < 0) || (y < 0)

  binary_x = x.to_s(2)
  binary_y = y.to_s(2)

  if binary_x.length > binary_y.length
    prefix = '0' * (binary_x.length - binary_y.length)
    binary_y = prefix + binary_y
  elsif binary_y.length > binary_x.length
    prefix = '0' * (binary_y.length - binary_x.length)
    binary_x = prefix + binary_x
  end
  result = '0b'
  binary_x.each_char.with_index do |x_char, i|
    y_char = binary_y[i]

    result += if (x_char == '1' && y_char != '1') || (x_char != '1' && y_char == '1')
                '1'
              else
                '0'
              end
  end

  result
end

begin
  binary_xor(-1, 0)
rescue StandardError => e
  puts e.message
end
# Input must only contain positive integers

puts binary_xor(1, 1)
# 0b0
puts binary_xor(0, 1)
# 0b1
puts binary_xor(1024, 1024)
# 0b00000000000
puts binary_xor(0, 1023)
# 0b1111111111
puts binary_xor(16, 58)
# 0b101010