Skip to content

Instantly share code, notes, and snippets.

@Nasdin
Last active September 19, 2021 16:43
Show Gist options
  • Select an option

  • Save Nasdin/1f47679877222b1ec0107750862979bf to your computer and use it in GitHub Desktop.

Select an option

Save Nasdin/1f47679877222b1ec0107750862979bf to your computer and use it in GitHub Desktop.
How to sum, without using + or - in Python
def sum_bits(larger, smaller):
""" Sum but using bits, only positive numbers"""
top_down_sum = larger ^ smaller
carry = (larger & smaller) << 1
if carry > 0:
return sum_bits(top_down_sum, carry)
return top_down_sum
def sub_bits(larger, smaller):
"""Subtraction but using bits, only positive numbers"""
top_down= larger ^ smaller
borrow = ((~larger) & smaller) << 1
while borrow > 0:
return sub_bits(top_down, borrow)
return top_down
def sum(larger_number:int, smaller_number:int):
""" Sum function, in O(1) time and space, using bitwise operators
Can sum positive with negative and any combination
"""
abs_larger = abs(larger_number)
abs_smaller = abs(smaller_number)
if abs_larger < abs_smaller:
return sum(smaller_number, larger_number)
to_plus = larger_number* smaller_number >= 0
sign = 1 if larger_number > 0 else -1
if to_plus:
return sum_bits(abs_larger, abs_smaller) * sign
else:
return sub_bits(abs_larger, abs_smaller) * sign
print(sum(5, 5))
# >> 10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment