Reasoned Schemer (30) 引き算
次は引き算ですがこれはそのままとはいきません
関係プログラミングだから足し算ができれば自動的に引き算もできてましたが(効率とかどうなのかな)
普通は引き算は引き算で書かないと
引き算を書くには、足し算と同じようなことを書く方法もありますが、
足し算は半加算器・全加算器使ってやってる、引き算は?と考えると
2の補数ってやつを使いますね
ってことまでは覚えてましたが2の補数ってなんだっけ?
マイナスの数を表す方法で、マイナスにしておいてから足す、んだけど・・・
足したら2になるんだったかな?
3ビットくらいで試してみるかな
こうか
ビット列 | 符号なし整数 | 符号付き整数 |
---|---|---|
0 0 0 | 0 | 0 |
0 0 1 | 1 | 1 |
0 1 0 | 2 | 2 |
0 1 1 | 3 | 3 |
1 0 0 | 4 | -4 |
1 0 1 | 5 | -3 |
1 1 0 | 6 | -2 |
1 1 1 | 7 | -1 |
最上位ビットの重みが-4と考えてるわけだ
これで 3-2 を計算すると、3+(-2)とみて011+110=1001、最上位ビットは無視して001つまり1になる
おk
マイナスの数にする方法もあったな
確かビットを反転して・・・
3=011なら100にして・・・1を足せばいいのか
101になって-3
「2の補数」はなんだっけ 足したら2?
3+(-3)は・・・て足したら0になってくれないと困る
実際足すと011+101=1000で最上位ビットを無視して0
足すと0になる
当たり前
なんで「2の」なんだ?
まあいいや
これ、この場合でも使えるのかな
なんとなく桁数固定じゃないとよろしくない気もするけど
いや、桁数が大きい方に揃えるだけか
できるな
でどっちでやろうか