基本情報技術者(基礎理論④)

基本情報技術者

この記事では2進数の四則演算についてご紹介します。
ご存じかとおもいますが四則演算とは足し算、引き算、かけ算、わり算を指します。
10進数の四則演算は小学校で習いますが、2進数の四則演算については習わない?少なくとも私は習っていません!(記憶が正しければ…)
それでは2進数の四則演算はどのように行うのか例を交えて説明していきます!

2進数のたし算

2進数のたし算は10進数の時同様に筆算をすることで求められます、桁をそろえて右の桁から計算を始めます。
例として2進数「11」と「101」の計算をしてみましょう。

2進数のひき算

2進数の引き算も10進数の時同様に筆算をすることで求められます、桁をそろえて右の桁から計算を始めます。
例として2進数「101」と「11」の計算をしてみましょう。

2進数のかけ算・わり算

2進数のかけ算わり算について、すでに基数変換を学んだあなたなら一度10進数に変換してから計算し2進数に再度変換することで求めることができます。
(基数変換が分からない方は「基本情報技術者(基礎理論②)」をご覧ください!)
ただ、基本情報技術者の試験では「シフト演算」を使用して2進数のまま、かけ算・わり算を行うほうが効率的です!(むしろこれができることが求められています。もちろん試験中ど忘れしたら前者の方法で計算してください!)

シフト演算

シフト演算とは簡単にいうと、ビットを左右にずらすことで、わり算やかけ算を行う計算方法のことを指します。シフト演算には主に以下の2種類の方法があります。

論理シフト:正負の考慮なし
算術シフト:正負の考慮あり

①論理シフト

論理シフトというのは正負を考えない(符号ビットを考慮しない)シフト演算です。
以下の手順で論理シフトを行います。

・ビット列を左右にずらす
・ビット列からはみ出てしまったビットを削除する
・空いたビットに「0」を挿入する

■左方向の論理シフト

■右方向の論理シフト

上記の2つの図から分かるように左方向にずらすと2倍、右方向にずらすと1/2倍となっています。
このことからビット列をn個左にずらすと元の数値の「2n倍」に、ビット列を右にずらすと元の数値の「2-n倍」になります。

②算術シフト

算術シフトというのは正負を考えない(符号ビットを考慮する)シフト演算です。
以下の手順で算術シフトを行います。

・符号ビットを固定する
・ビット列を左右にずらす
・ビット列からはみ出たビットを削除する
・左方向にずらした場合、空いたビットに「0」を挿入する
・右方向にずらした場合、符号ビットと同じ数を挿入する

■左方向の算術シフト

■右方向の算術シフト

まとめ

いかがだったでしょうか。今回は2進数の四則演算について解説しました。
私は最初、論理シフトと算術シフトの違いについてなかなか覚えられませんでした…
この分野は数学同様に数をこなす方が重要です。過去問、類似問題をたくさん解いて体に覚えこませましょう!
ちなみにこの2進数の四則演算は単体で出るよりも「基本情報技術者(基礎理論②)」でご紹介した基数変換と一緒に出題されることがほとんどです。
なのでもし基数変換を知らない、危ういな…と思った方はぜひこちらの記事もお読みください。

①2進数の四則演算は桁を合わせて行う。
②2進数のたし算は2で位が上がることに注意する。
③2進数のひき算では引けないときは一つ上の位から借りてくる。
④2進数の四則演算は論理シフト、算術シフトを使用した方が早く問題が解ける可能性が高い。
⑤論理シフト(符号無視)は以下の手順で行う。

・ビット列を左右にずらす
・ビット列からはみ出てしまったビットを削除する
・空いたビットに「0」を挿入する

⑥算術シフト(符号考慮)は以下の手順で行う。

・符号ビットを固定する
・ビット列を左右にずらす
・ビット列からはみ出たビットを削除する
・左方向にずらした場合、空いたビットに「0」を挿入する
・右方向にずらした場合、符号ビットと同じ数を挿入する



コメント