I started adding unittest code to the module to see how it works and unfortunately, addition fails. Here is my code
# This is a trial code to write the four function
# (addition, subtraction, multiplication & division)
# using bitwise operations only. I am doing this to
# improve my boolean logic and algorithms
num1 = int() # We define two variables
num2 = int() # to use in all our functions
data = int() # this is carry handling
mask = 0xffffffff
sign = bool(False)
# Addition function
def addition(num1, num2):
while (num2 & mask) != 0:
data = (num1 & num2)
num1 = num1 ^ num2
num2 = data << 1
return num1 & mask if num2 > 0 else num1
# Subtraction function
def subtraction(num1, num2):
data = addition(num1, ~num2)
data = addition(data, 1)
return data
# Multiplication Function
def multiplication(num1, num2):
sign = (num1 < 0) ^ (num2 < 0)
num1 = abs(num1)
num2 = abs(num2)
data = int(0)
while num2 > 0:
if 1 & num2 == 1:
data = addition(data, num1)
num1 <<= 1
num2 >>= 1
if sign:
data = addition(~data,1)
return data
# Division Function
def division(num1, num2):
sign = (num1 < 0) ^ (num2 < 0)
num1 = abs(num1)
num2 = abs(num2)
data = int(0)
for i in range(31,-1,-1):
if num2 << i <= num1:
num1 = subtraction(num1, num2 << i)
data = addition(data, 1 << i)
if sign:
data = addition(~data, 1)
return data
import unittest
class TestAddition(unittest.TestCase):
def test_addition(self):
for x, y in [
(5, 7),
(1, mask+1),
(13477775778888877, 277777788888888887777)]:
self.assertEqual(addition(x, y), x+y, f'{x}+{y} failed')
if __name__ == '__main__':
unittest.main()
Output:
F
======================================================================
FAIL: test_addition (__main__.TestAddition.test_addition)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/eric/Projets/Scratch/2023-01/paillasse/pf/metalione.py", line 72, in test_addition
self.assertEqual(addition(x, y), x+y, f'{x}+{y} failed')
AssertionError: 1 != 4294967297 : 1+4294967296 failed
----------------------------------------------------------------------
Ran 1 test in 0.000s
FAILED (failures=1)
λ
Note that Python integers don't work with 32 bits. Conceptually, they have an infinite number of bits.