You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

37 lines
984 B

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()