こういう、Pythonの組み込みクラス(この場合はint)に似ているけどちょっと違うような演算を作るのは、クラスを継承するに限ります。
よって、intを継承したGPR8(汎用8ビットレジスタ)クラスを作ってみました。
とりあえず、右シフト操作を中心に実装してみました。同様にいろいろな演算を定義するとともに、「キャリーフラグ」を実装したり、上位8ビットと下位8ビットを組み合わせた16ビット演算を定義してみたり、いろいろ作り上げてみてください。きっと"楽しい"です。
Python
1class GPR8(int): # 汎用8ビットレジスタ
2 bit = 8
3 @classmethod
4 def _mod(cls, num): # 整数を0〜2^bitに丸める
5 return int(num) % (2**cls.bit)
6
7 def __new__(cls, num, *args, **kw):
8 num = cls._mod(num)
9 return super().__new__(cls, num, *args, **kw)
10
11 def __repr__(self): # print等の演算をオーバーロード
12 return f'{self:08b}'
13
14 @property
15 def msb(self): # 最上位ビット
16 return int(self) // 2**(self.bit-1)
17
18 def _rshift1(self): # 右1bitシフト、最上位は残す
19 msb = self.msb
20 result = int(self) >> 1
21 result += 2**(self.bit-1) if msb == 1 else 0
22 return GPR8(result)
23
24 def __rshift__(self, shift): # 右シフト演算をオーバーロード
25 result = self
26 for _ in range(shift):
27 result = result._rshift1()
28 return result
29
30al = GPR8(1)
31al = GPR8(1)
32print(al)
33#00000001
34al = GPR8(-1)
35print(al)
36#11111111
37al = GPR8(100)
38print(al)
39#01100100
40print(al >> 2)
41#00011001
42al = GPR8(0x83)
43print(al)
44#10000011
45print(al >> 4)
46#11111000
47print(al) # alそのものは変更されていない(Pythonの演算子と同じ考え)
48#10000011
49al >>= 4 # alそのものを変更するシフト演算子も記述可能
50print(al)
51#11111000