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

  1. class nBit:
  2. def __init__(self, bitlength):
  3. self.bitlength = bitlength
  4. self.registers = {"a": 0}
  5. self.carry_status = 0
  6. def create_register(self, name):
  7. self.registers[name] = 0
  8. def set_register(self, name, v):
  9. self.check(v)
  10. self.registers[name] = v
  11. def get_register(self, name):
  12. return self.registers[name]
  13. def check(self, n):
  14. if n.bitlength > self.bitlength:
  15. raise OverflowError
  16. def maybe_carry(self):
  17. if self.registers["a"].bit_length() > self.bitlength:
  18. self.registers["a"] &= 1 << self.bitlength - 1
  19. self.carry_status
  20. def add(self, v):
  21. self.registers["a"] += v
  22. self.maybe_carry()
  23. def shift_right(self):
  24. self.registers["a"] >>= 1
  25. if self.carry_status == 1:
  26. self.registers["a"] &= 1 << self.carry_status
  27. def shift_left(self):
  28. self.registers["a"] <<= 1
  29. self.maybe_carry()