C言語のシフト演算の欠点はキャリービットみたいな桁あふれ情報が消えちゃうこと。
おかげでアセンブラよりシフト演算が面倒になってる
シフト演算を実装するなら、桁あふれ情報を保持してほしい
(ついでにCPUのフラグレジスタの情報もあると便利かもしれない)

uint8_t x = 0xaa;
x.<<(2);                    #記号でも単語でもどっちでもいいけど
puts x.flood;  #=>2      #2ビットのシフト演算で溢れたビット(2b'10)

uint32_t x = 0xffff.ffff;
x += 1;
puts x;        #=>0
puts x.carry; #=>1

とかね