class nBit: def __init__(self, bitlength): self.bitlength = bitlength self.registers = {"a": 0} self.carry_status = 0 def create_register(self, name): self.registers[name] = 0 def set_register(self, name, v): self.check(v) self.registers[name] = v def get_register(self, name): return self.registers[name] def check(self, n): if n.bitlength > self.bitlength: raise OverflowError def maybe_carry(self): if self.registers["a"].bit_length() > self.bitlength: self.registers["a"] &= 1 << self.bitlength - 1 self.carry_status def add(self, v): self.registers["a"] += v self.maybe_carry() def shift_right(self): self.registers["a"] >>= 1 if self.carry_status == 1: self.registers["a"] &= 1 << self.carry_status def shift_left(self): self.registers["a"] <<= 1 self.maybe_carry()