機械学習やデータ分析分野で定番のプログラミング言語、話題のPythonを使って数学を学び直しましょう。今回は「負の数の扱い方」を解説します。

 「-5」や「-10」のように、私たちは数字の前に「-」を付けることで負の数を表しますが、すべての情報を0と1で扱うコンピュータの世界で「-」は使えません。その代わりに符号ビットを使って負の数を表します。

x+1=0を計算する

 10進数の計算です。1を足して0になる値は何でしょう? 方程式を立てると、

  x+1=0
  x=-1

ですね。

 今度は2進数の計算です。8桁で考えましょう。「0000 0001」を足して「0000 0000」になる値は何だと思いますか?以下の図を見ながら考えてください。

「1111 1111」に「1」を足す
[画像のクリックで拡大表示]

 「1111 1111」に「0000 0001」を足すと、桁が1つ繰り上がって「1 00000000」になります。しかし、最初に「8桁で考える」という条件があるので、あふれた桁を捨てると答えは「0000 0000」です。

 1を足して0になる値は、「-1」しかありません。つまり、10進数の「-1」を2進数で表すと「1111 1111」になります。

 ──と言われて、素直に納得できますか?2進数の「1111 1111」は、

  27×1+26×1+25×1+24×1+23×1+22×1+21×1+20×1
  =128+64+32+16+8+4+2+1
  =255

で10進数でいう「255」のはずです。「-1」とは明らかに違う値なのに、2進数では同じ値になるなんて、頭が混乱してきませんか?