commit 60bf340896439a634e3933bfd1f5e233ef75b01a Author: Raphael Roberts Date: Wed Nov 6 00:22:27 2019 +0000 I think I might have to reinvent the wheel... diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7f7eb01 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +.dir-locals.el \ No newline at end of file diff --git a/work.py b/work.py new file mode 100644 index 0000000..0017bb6 --- /dev/null +++ b/work.py @@ -0,0 +1,37 @@ +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()