二の補数
昔、学生の時に習った補数表現。
今まで何度かお仕事で使う機会があったのだが、その仕事が終わるとすぐに忘れてしまうので、備忘録的にまとめておく。
二の補数はマイナスの表現方法だ。
計算方法としては全ビットを反転させて、+1する。ただそれだけ。
例えば8bitの-1の二の補数は
1) 元データ: 0000 0001
2) ビット反転: 1111 1110
3) プラス1: 1111 1111
十六進数だと0xFFとなる
もうひとつ、-128だと
1) 元データ: 1000 0000
2) ビット反転: 0111 1111
3) プラス1: 1000 000
十六進数だと0x80となる
単純に最上位ビットを符号判定に使うほうが人間的には分かりやすいと思うのだが、コンピュータ的にはマイナスを二の補数にすることで全て「加算」で処理できるという大きなメリットがあるので、こちらが使われているようだ。
例えば5-3を考えると3の二の補数表現は111 1101なので
0000 0101
+ 1111 1101
------------------
1 0000 0010
となる、先頭の桁あふれ部分は捨てられるので2が得られる。
多分、もう忘れないはず。。。