LoginSignup
0
0
この記事誰得? 私しか得しないニッチな技術で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

【2進数計算】なぜ「全ての位の値を反転させて1を加える」とマイナスになるのか、言語化して理解する

Posted at

初めに

最近コンピュータの動き方について学んでいて、2進数の計算の章に入りました。
その中で、2進数でマイナスの値を求める際は

  • 全ての位の値を反転させる
  • それに1を加える

という方法で求めるということを知り、「?」となりました。
直感では理解できなかったので、「なぜ?」を理解しながらまとめていきます。

※数学は初心者なので細かいことを言えば違うのかもしれないですが、覚えるための理由付けくらいにはなるかなと思います

2進数でマイナスの値を表現する

まずは、2進数のマイナスの表現の仕方をおさらいしましょう。

例)10進数の-6を4桁の2進数で表すと?

  • 10進数の6を2進数で表すと0110となる
  • 2進数では最上位の桁で符号を表現する

以上の知識から、-6は1110になりそう!

・・・と思ったのですが、これは間違いで、正解は1010になります。

マイナスの値の計算方法

冒頭に記載した通り、マイナスの値を求める方法はこちらです。

  • 全ての位の値を反転させる
  • それに1を加える

暗記すればいいっちゃいいのですが、それだと面白くないので、意味を理解してみようと思います。

解説

前提①:そもそもプラスとマイナスの関係とは

そもそもプラスとマイナスの関係とはなんでしょうか。
それは、足して0になるということです。
例えば、8と-8や、15と-15など、符号を変えただけの二つの数を足すと0になります。

2進数においてもそれは同じです。

前提②:0と10000は、どちらも0000

最大桁数がある場合、0はいろんな数で表現することができます。

例として、4桁の2進数で0を表してみましょう。
0は0000で表すことができますが、これだけ見ると0なのか10000なのか、区別がつきません。
つまり、0と10000を同じ数字とみなすことができるのです。

これらの前提を踏まえると、足して10000をつくることができれば、その数は元の数をマイナスにした数と考えることができるということができます。

改めて2の補数の計算を見てみる

ということで、改めて2の補数の計算方法を見ていきましょう。
先ほどと同様、10進数の-6を2進数で表してみます。

手順1:全ての位の値を反転させる

2進数の6は0110だったため、それを反転した数は1001になります。
元の数と足すと、1111となり、目標である10000には1足りません。

手順2:それに1を加える

ということで、1を足して10000にしましょう。
1001に1を足すと1010になり、これが2進数における-6になります。

まとめ

2進数でマイナスの値を求める手順は、足して0を求めるための手順を簡略化したものと言い換えることができる。

おまけ:全ての位の値を反転させるとはどういうことか

ところで、なぜ全ての値を反転させると都合よくなるのでしょうか
10進数で考えてみました。

10進数で考えてみる

2進数では、全ての位の値を反転させて元の数と足すと、合計が1111になりました。
これは、10000よりも1少ない数です。

対して、10進数における10000より1少ない数字は9999です。
つまり、2進数における「全ての位の値を反転させる」とは、10進数における9999を作るための手段といえます。

このことから、「全ての位の値を反転させる」とは、n進数の場合に各桁がn-1になるような値を求めると言い換えることができます。

2進数の場合、「全ての位の値を反転させる」ことでそれを満たすことができるので、このように言われるというわけです。

終わりに

今回は2進数におけるマイナスの数の求め方を学びました。
理由が分かるとすっきりするし、単純暗記よりも記憶に残りますね!

ここまで読んでいただきありがとうございました!

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0