Akira's Blog

神奈川在住のITエンジニアの雑記です。主にプログラミング(Perl, Java など)やネットワーク技術についての小ネタを、ちょっとずつ書いていきます。

負数の2進表記について

以前、負数の2進数での表現(いわゆる2の補数)の考え方がピンと来なかった。いつからか以下のように理解するようになり、それなりにイメージできるようになった。

例えば、1バイトのデータだったら、負数の最大値は 11111111 である。(負数なので先頭ビットは 1 。)  負数の最大値は -1 なので、この 11111111 が -1 である。これから 1 を引くと、11111110 となり、これは -1 より 1 小さい数なので -2 である。こんな感じで考えていくと、

11111111: -1
11111110: -2
11111101: -3
11111100: -4
11111011: -5
11111010: -6
11111001: -7
11111000: -8

・・・
10000000:-128

のように、小さくなるにつれて、下位 から 1 が削られていき、負数の最小値 10000000 (-128) まで辿り着く。 

 

こう考えるようになってから、イメージがわくようになった。最近、こういった低レイヤのことを意識する機会は減ってきたが、トラブルシュートでダンプ解析する時などはやっぱり必要になるので、ここに書いておく。