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米国国家安全保障局)&浮気しまくりの後、元のジムに復帰♪ »
「数学」カテゴリの記事
- パズル「推理」の解き方、考え方、表の書き方17(難易度5、ニコリ作、朝日be、25年7月5日)(2025.07.07)
- merry X-mas の数式変形(log e 方程式)、20年以上前の英語の math pun (数学ジョーク)&ジムやや不調(2025.07.03)
- パズル「絵むすび」34、解き方とコツ、考え方(難易度4、ニコリ作、朝日新聞be、2025年5月24日)(2025.05.25)
- 小学生の習い事と受験勉強でしぶとく人気の算盤(そろばん)、令和ではタブレットと可愛いアプリで(2025.04.26)
- トランプ相互関税の税率の数式、経済的にも意味はあるけど数値1つ(分母の係数 φ)の代入ミス、英語原文と数学的解説(2025.04.09)
「教育」カテゴリの記事
- APU(立命館アジア太平洋大学、別府市)の番組2つの比較、NHK『多国籍学生寮の72日間』はドキュメント72時間よりリアル(2025.06.11)
- 4×9=36マスの格子を、8つの長方形(1~8マス)に区切る方法~開成中2025年入試、算数・問題2の解き方(2025.02.15)
- かけ算の九九の表で、長方形で囲まれた数を足して315になる場合~灘中学校2025年入試、算数1・問題6の解き方(2025.02.07)
- 動画配信のおすすめ作品など、商業サイトでお薦めを決める方法と計算回数~2025年共通テスト・旧情報関係基礎・第2問(2025.02.04)
- くじ引き3回の参加料と景品代の期待値、金額設定の妥当性 ~ 2025年共通テスト・数学 Ⅰ A・第4問(2025.01.22)
「情報」カテゴリの記事
- 動画配信のおすすめ作品など、商業サイトでお薦めを決める方法と計算回数~2025年共通テスト・旧情報関係基礎・第2問(2025.02.04)
- スーパー(小売店)の全国チェーンの情報システム、商品配送、顧客会員管理 ~ 2025年共通テスト・情報 I ・第2問・A(2025.01.20)
- NOT回路(ゲート)、AND回路、OR回路を組み合わせた設計、論理回路の問題の解き方、考え方~ 高校『情報 Ⅰ 』(2024.11.02)
- ps5.js Web Editor(Processing)のプログラミングでお絵描き、アニメーション作成~ 高校教科書『情報 II 』(東京書籍)(2024.08.22)
- 2進法の計算、直接的な減法(引き算)と、コンピューター内部で「2の補数」を用いる減算 ~ 高校『情報Ⅰ』(2024.06.04)
コメント