2進法の計算、直接的な減法(引き算)と、コンピューター内部で「2の補数」を用いる減算 ~ 高校『情報Ⅰ』
1年半ぶりに、高校の新必修科目『情報 I 』の教科書(東京書籍)で記事を書いてみよう。プログラミング記事は別にすると、今まで2本だけ記事をアップ。2本目には地味にアクセスが入り続けてる。相対的にきっちりしたデジタル計算の方が好まれるということか。あるいは、高校のテストに出やすいとか。
アナログの音のデジタル化(標本化=サンプリング、量子化、符号化)~高校『情報Ⅰ』(新必修科目)
デジタル画像の可逆圧縮、「ランレングス(連長)圧縮」の簡単な具体例と説明、圧縮率の計算~高校『情報Ⅰ』
今日ここで扱うのは、正直言うと、私が今までなるべくスルーしてた「2の補数」の話。2進数の引き算をコンピューターが行う時、直接の引き算ではなくて、まず引く数に対する「2の補数」を求めて、引かれる数に足して、最後に「桁上がり」を削除するらしい。
この話を最初に聞いたのはかなり前のことで、ずいぶん回りくどい方法だなと感じてしまった。引き算1回を、3回の演算に分けて処理することになる。今でも、面倒な手続きのデメリットに対してメリットがどれだけあるのか、人間の私としてはよく分からない。
とはいえ、高校の必修科目の教科書で、計算の基本として説明されてるので、試しに学校教育の流れに乗ってみよう。教科書p.38~p.39の内容。
☆ ☆ ☆
まずは、2進数の足し算の確認から。例題1①。下線の入力が出来ないので、代わりに色を変える。
ポイントはただ1つ。「1+1=10」。つまり、1と1を足す時だけ、1が上の位に繰り上がる。ちなみに、特に何も書かなければ2進数を表すことにする。
0101
+) 1001
1110
この計算は、右端(2の0乗の位)からその左隣(2の1乗の位)へと、繰り上がりが1回あるだけだから、非常に簡単。
☆ ☆ ☆
続いて、直接的な減法(引き算)。足し算は昔から普通にある話だが、引き算を前面に出すのは目新しいことのような気がする。
例題1②。ポイントはただ1つ。
「0-1=1 ただし上の位(左の桁)から1、借りる」。
1010
-) 0110
0100
答の最上位(左端)の0を書いてるのは、この後、全体の桁数や左端が重要な意味を持って来るから。例えば、左端の0は「正(+、プラス)」の意味にもなる。
もう1問、やってみよう。問題3②。教科書では、2の補数を用いて計算することになってるが、ここではまず普通に引き算してみる。
1100
-) 1001
0011
この計算では、まず右端で、0-1=1となって、引かれる数の左隣の桁から1借りる。ところが左隣は0だから、そのまた左隣から借りて来て、結局、100-1=11、と計算することになる。
そうではなく、「0から1借りるから、右端から2番目はまず-1になる。さらに、-1-0=1で、上の桁から1借りて・・」などと考えることも可能だが、流石に不自然すぎて間違えやすいし、分かりにくいだろう。
☆ ☆ ☆
一方、コンピューターの内部では、引き算は、「2の補数」を用いて足し算にすると言われてる。具体的な問題でやってみよう。
まず、上の例題1②の引き算。1010-0110=0100。
引く数0110に対して、「補数とは、ある自然数に足して桁が1つ上がる数のうち、最も小さな数のこと」。2進法だと、2の補数とも呼ばれる。
この説明は分かりにくいので、2進法の場合の簡単な説明も載ってた。「補数は2進法の数値の0と1を反転させた数に1を足すことで機械的に求められる」。「2の4乗-元の数」という数学的説明と比べても、反転+1の方が実用的だと思う。
上の問題の場合、(0110の補数)=1001+1=1010。要するに、10000-0110を表してる。(2の5乗)-(元の式の引く数)。
これを用いると、元の引き算は次のように処理できる。ある数を引く代わりに、その数の補数を足して、10000を引く(4桁の引き算の場合)。
1010-0110
=1010+(10000-0110)-10000
=1010+(2の補数)-10000
=1010+1010-10000
=0100
確かに、直接の引き算と同じ答が出た。
☆ ☆ ☆
続いて、問題3②も補数で計算し直してみる。
1100-1001
=1100+(10000-1001)-10000
=1100+(2の補数)-10000
=1100+0111-10000
=0011
これも同じ答になった。
☆ ☆ ☆
では最後に、答がマイナスになる引き算について。教科書には載ってなかったので、手元のデジタル関連本の問題を少し改変して考えてみよう。1010-1101。
直接の引き算だと、最初に少し変形して、引きやすくする。負の数が登場する中学1年くらいで使ってた変形だと思う。
1010-1101
= -(1101-1010)
= -0011
マイナスの符号を除くと、元の引く数1101の補数になってるが、これは単なる偶然。ちなみに、上の計算を十進数で書き直すと、10-13=-3ということ。
一方、2の補数を用いて引き算すると、
1010-1101
= 1010+(10000-1101)-10000
= 1010+(2の補数)-10000
= 1010+0011-10000
= 1101-10000
= -(10000-1101)
= -0011
答は一致するが、やはり人間的にはメリットを感じないどころか、短所・欠点の方が目立つ気もする。
☆ ☆ ☆
案外、コンピューターの設計図である論理回路を2種類、書いて比較すれば、2の補数を用いた引き算の長所が見えて来るのかも知れない。
それは図の作成も含めてかなり面倒な作業になってしまうから、先送りにしとこう。とりあえず、今日の所はこの辺で。。☆彡
(計 2356字)
| 固定リンク | 0
« 肉・玉子・牛乳・豆腐・大豆・・・欲しくなくてもタンパク質をとる毎日♪&雨上がりプチラン | トップページ | 週1度はセキュリティ対策でスマホの電源オフ(NSA米国国家安全保障局)&浮気しまくりの後、元のジムに復帰♪ »
「数学」カテゴリの記事
- 積立預金2、今でも申し込める高島屋「スゴ積み」、実質年利15%の計算式と解説&今季ハーフ3本目、まずまず♪(2024.12.06)
- ヤマダデンキの幻の積立預金、実質年利18.5%(!)の計算式と解説&7kmラン&計14kmウォーク(2024.12.03)
- パズル「絵むすび」32、解き方とコツ、考え方(難易度4、ニコリ作、朝日新聞be、2024年11月9日)(2024.11.09)
- 中国アリババ世界数学コンテスト2023予選、火の玉のコントロール、球状閃電(球電:ball lightening)の問題と解説(2024.11.05)
- NOT回路(ゲート)、AND回路、OR回路を組み合わせた設計、論理回路の問題の解き方、考え方~ 高校『情報 Ⅰ 』(2024.11.02)
「教育」カテゴリの記事
- インドの摩訶不思議な「ヴェーダ数学」、100に近い2つの数の掛け算のやり方、明星学園の中学入試問題(算数)と一般的証明(2024.07.06)
- Mrs. GREEN APPLE の曲『コロンブス』のMV炎上、探検家の歴史的評価の変化と、山川出版社の現在の高校教科書『世界史探究』(2024.06.15)
- 2進法の計算、直接的な減法(引き算)と、コンピューター内部で「2の補数」を用いる減算 ~ 高校『情報Ⅰ』(2024.06.04)
- ChatGPT-4oが音声と画像認識を利用して家庭教師、三角関数(三角比)のsinを英語で教えるビデオ動画の解読(2024.05.18)
- 朝ドラ『虎に翼』で受験、昭和初期(戦前)の国家・高等試験問題とAIの解答〜司法科・選択科目「論理学」、繋辞(コプラ)の意義(2024.05.11)
「情報」カテゴリの記事
- NOT回路(ゲート)、AND回路、OR回路を組み合わせた設計、論理回路の問題の解き方、考え方~ 高校『情報 Ⅰ 』(2024.11.02)
- ps5.js Web Editor(Processing)のプログラミングでお絵描き、アニメーション作成~ 高校教科書『情報 II 』(東京書籍)(2024.08.22)
- 2進法の計算、直接的な減法(引き算)と、コンピューター内部で「2の補数」を用いる減算 ~ 高校『情報Ⅰ』(2024.06.04)
- デジタル画像の無駄な1ビットに、ひそかに文字を埋め込む暗号の作り方~2024年共通テスト・情報関係基礎・第1問・問3(2024.02.14)
- 宇宙船に乗った異星人はどこから地球に来たのか?、出身星を見分ける効率的な質問方法~2024年共通テスト・情報関係基礎・第2問(2024.02.03)
コメント