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