from random import randint

# for _ in range(10):
#     a, b = randint(0, 100), randint(0, 100)
#     x = a & b
#     y = ~((~a) | (~b))
#     print(x, y)

def union(a, b):
    x = 0
    for y in range(a, b + 1):
        x |= y
    return x

def inter(a, b):
    x = a
    for y in range(a + 1, b + 1):
        x &= y
    return x

def union(a, b):
    r = 0
    m = b.bit_length()
    for i in range(m + 1):
        x = a | (1 << i)
        y = b | (1 << i)
        if a <= x <= b or a <= y <= b:
            r |= (1 << i)
    n = a.bit_length()
    for i in range(n, m + 1):
        x = 1 << i
        if a <= x <= b:
            r |= (1 << i)     
    return r

def _inter(a, b):      
    return ~(union(~b, ~a))
    
for _ in range(500):
    a = randint(0, 10000)
    b = randint(a, 10000)
    i = inter(a, b)
    j = _inter(a, b)
    if i != j:
        print(a, b, list(map(bin, [a, b, i, j])))

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: