脇の甘い日常

プログラミング関係のお仕事ネタや、チャリ、マラソン、トレランなどの趣味ネタを書き綴っていこうと思います

二の補数

昔、学生の時に習った補数表現。
今まで何度かお仕事で使う機会があったのだが、その仕事が終わるとすぐに忘れてしまうので、備忘録的にまとめておく。

 

二の補数はマイナスの表現方法だ。
計算方法としては全ビットを反転させて、+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が得られる。


多分、もう忘れないはず。。。