2進数の計算方法をわかりやすく簡単解説!

ねこ
2進数でも計算ってできるのにゃあ?
もちろん!2進数でも計算は可能だよ
なつめ

 

どうも!エンジニア兼ライターのなつめです。
今回の記事では、2進数の計算方法について知っておきたい基礎知識初心者・未経験者にもわかりやすく説明していきます。

こんな方におすすめ

  • 2進数の計算方法を知りたい!
  • 足し算(加算)引き算(減算)掛け算(乗算)割り算(除算)を2進数で行いたい!
  • 負数の表現方法・2の補数について理解したい!
  • 負数の対応を早見表で確認したい!
  • シフト演算・ビットシフトの方法を知りたい!

 

エンジニアを目指す方やプログラミングを勉強中の方にとって、2進数の計算方法は理解しておきたい基礎知識です。
ぜひ最後まで読んでいってくださいね!

 

2進数表現の計算方法を簡単解説

2進数の計算方法を解説する前に、2進数について復習しておきましょう。
こちらの記事で詳しく解説していますので、2進数の理解に不安がある方はぜひお読みください。

2進数から10進数、10進数から2進数への変換方法も記載していますので、チェックしてくださいね。

こちらもCHECK

2進数と10進数の基本|2進数変換が簡単にできるようになる

基数の考え方、「2進数から10進数、10進数から2進数」への変換方法、2進数での足し算・引き算・掛け算の計算方法など2進数を徹底解説した「練習問題・2進数と10進数の対応表」付きの記事

続きを見る

 

なつめ
それでは、2進数の計算方法についてそれぞれ解説していくニャ!

 

2進数の足し算(加算)

 

2進数での加算は、10進数の時と同様に行えばOKです。
桁上がりに気をつけて、各桁ごとに加算を行いましょう。

計算方法として、2つの方法があります。

 

2進数の足し算(加算)方法 ①

  • 問題文の2進数を10進数へ変換する
  • 10進数で計算する
  • 計算の答えを2進数へ変換する

手間はかかりますが、慣れないうちは10進数を経由する方法がオススメです。

 

もう一つの方法は、2進数のまま計算します。

2進数の足し算(加算)方法 ②

  • 2進数のまま、直接足し算して計算する

 

慣れてきたら、計算スピードが早いこちらの計算を使うとよいでしょう。
計算間違えをしないように、筆算を使うのをオススメします。

なつめ
それじゃあ、実際に計算していこう!

例題

0101 + 0110 = ?

 

まず、10進数を経由する方法①から解いていきます。

  1. 最初に、問題文の2進数を10進数へ変換します


    0101(2進数)= 5(10進数)
    0110(2進数)= 6(10進数)

  2. 次に、変換した10進数で計算します


    5 + 6 =  11

  3. 最後に、計算した答えを2進数へ変換します


    11(10進数)= 1011(2進数)

2進数と10進数の変換方法が分からない方は、こちらをクリック!

参考  2進数と10進数の変換方法を確認

 

慣れてきたら、2進数のまま計算する方法②を使ってみましょう。

普段の10進数を計算する時と同様に、1の位から計算していきます。

  1. 1の位を計算
    1 + 0 = 1

  2. 2の位を計算
    0 + 1 = 1

  3. 4の位を計算
    1 + 1 = 10 → 0を答えにして、1は繰り上げる

  4. 8の位を計算
    0 + 0 + 1 (繰り上がってきた1) = 1

1+1=10は、桁上がり(繰り上がり)する点に気をつけましょう。

 

2進数の引き算(減算)

 

2進数での減算も、「10進数を経由する方法①」「2進数のまま計算する方法②」の2種類があります。

 

2進数の引き算(減算)方法 ①

  • 問題文の2進数を10進数へ変換する
  • 10進数で計算する
  • 計算の答えを2進数へ変換する

 

2進数の引き算(減算)方法 ②

  • 2進数のまま、直接引き算して計算する

 

なつめ
それじゃあ、例題を出してみるよ!

例題

1001 + 0011 = ?

 

まず、10進数を経由する方法①から解いていきます。

  1. 最初に、問題文の2進数を10進数へ変換します


    1001(2進数)= 9(10進数)
    0011(2進数)= 3(10進数)

  2. 次に、変換した10進数で計算します


    9 + 3 =  6

  3. 最後に、計算した答えを2進数へ変換します


    6(10進数)= 0110(2進数)

2進数と10進数の変換方法が分からない方は、こちらをクリック!

参考  2進数と10進数の変換方法を確認

 

慣れてきたら、2進数のまま計算する方法②を使ってみましょう。

「1 - 1 = 0」「1 - 0 = 1」のように1から引く際は問題ありませんが、「0 - 1」のように0から1を引く際は上の位から数字を借りてきます

10進数の引き算と同じ要領ですね。

1つ上の位にも借りてくる数字がない場合(数字が0の場合)は、さらに1つ上の位から数字を借ります

  1. 1の位を計算
    1 - 1 = 0

  2. 2の位を計算
    0 - 1 =  → 計算できないため、上の位から数字を借りる


    1つ上の位が0なので、さらに1つ上の位から借りる
    1  0  0 → 0  10  0 → 0  1  10 のようにそれぞれの位の数字を崩して借りていく


    これで2の位が10になり、10 - 1 = 1 で計算できる

  3. 4の位を計算
    4の位は1になっているので、 1 - 0 = 1 になる

  4. 8の位を計算
    8の位は借りてきたので、0になっている
    0 - 0 = 0

なつめ
減算の方法はわかったかニャ?次は「負数」0より小さい数マイナスについて考えていこう!

 

2進数での減算は、加算回路を使って行われることが多いです。
この際、負数(0より小さい数マイナス)との加算という形をとります。

負数表現には、2の補数がよく使われます。

 

負数の表現方法・2の補数を理解しよう

数字は「0, 1, 2, 3, …」だけでなく、0より小さい「-1, -2, -3, …」などの数字もありますよね。
ではこのマイナス数値を、2進数でどのように表現するのでしょうか?

なつめ
ここで登場するのが2の補数だニャー!

 

2の補数とは、2進数でよく使われる負数表現です。

演算で使われるbit数で負数の絶対値を表現しています。
負数表現は、演算のbit数が非常に重要になります。

bitについてよく分からない方は、こちらの記事も読んでみよう

 

参考16進数・8進数とは|わかりやすく使い方を解説した入門記事

16進数・8進数とは?変換方法やコンピュータの単位「ビット」について詳しく説明した「16進数含む対応早見表」「理解度チェック練習問題」付きの記事

続きを見る

 

2の補数の求め方は、以下の通りです。

2の補数の求め方

  • 2の補数を求めたい数値を反転させる(これを1の補数という)
  • 求めた1の補数に、1を足す(これを2の補数という)

 

それでは実際に、2の補数を使用して負数を表現してみましょう。

例題

「3」の2の補数を求め、「-3」を2進数で表現する

 

  1. 「3(10進数)」を2進数で表現すると、「0000 0011」になる(8bitで表現する)

  2. 「0000 0011」の数値を反転させる(1の補数)


    0000 0011 → 1111 1100

  3. 1の補数「1111 1100」に、1を足す(2の補数)


  4. 「3」の2の補数は「1111 1101」のため、「-3」を2進数で表現すると「1111 1101」になる

 

符号なし整数と符号付き整数

なつめ
実は、2の補数以外にも負数を表現する方法があるよ

 

bit内に符号をつけることで負数を表現する方法もあります。
これを、符号付き整数と言います。

符号付き整数は、正負両方の数値を表現する方法です。

対して、これまで使ってきた表現方法は、0と正の整数のみを表す符号なし整数です。

同じbit数を使った場合、表現できるデータの種類は変わりません。
例えば、8bitで表現するなら表現できる数値は256種類です。

8bitという限られたデータの中で、256種類を正負に割り当てるのか、全て正に割り当てるのかで最大値・最小値が変わってきます。

 

正数のみに割り当てる場合に表現できる数値は、0〜255
正負両方ともに割り当てる場合は、-128〜127

 

2進数8bitで負数を表現する時は、以下の方法があることを覚えておきましょう。

 

  1. 符号付き整数で、絶対値表現をする


    最上位bitが「0なら正数」「1なら負数」となる(最上位bitで符号を表現する=符号ビットとも言う)
    最上位bitを除いた、残り7bitで数値を表現する

  2. 2の補数を使用して表現する


    1の補数表現・・・8bitで数値を表現し、全てのbitを反転させたものを負数とする
    2の補数表現・・・1の補数に1を足したものを負数とする

 

いずれの場合も、最上位bitが1なら負数になります。

 

負数の対応早見表

負数の対応早見表です。ご確認ください。

10進数 符号付き絶対値表現 1の補数 2の補数
+127 0111 1111 0111 1111 0111 1111
+126 0111 1110 0111 1110 0111 1110
+3 0000 0011 0000 0011 0000 0011
+2 0000 0010 0000 0010 0000 0010
+1 0000 0001 0000 0001 0000 0001
+0 0000 0000 0000 0000 0000 0000
-0 1000 0000 1111 1111 0000 0000
-1 1000 0001 1111 1110 1111 1111
-2 1000 0010 1111 1101 1111 1110
-3 1000 0011 1111 1100 1111 1101
-126 1111 1110 1000 0001 1000 0010
-127 1111 1111 1000 0000 1000 0001
-128 1000 0000

 

シフト演算・ビットシフト

ねこ
掛け算と割り算の計算方法も教えてにゃあ〜
OK!その前にシフト演算についても触れておきましょう!
なつめ

 

シフト演算とは、bit列を右や左にずらす計算です。

左1bitシフトすることで、元の数の2倍
右1bitシフトすることで、元の数の1/2倍になります。

オーバーフローやアンダーフローした際は、別です

 

シフトした結果、bitが空いた場合は0を入れます。

 

具体例をあげて解説していきます。

例題

「1111 1010(8bit)」を左シフト演算する

一つずつbitを左へずらし、元々あった一番左の最上位bitである1は、8bitから溢れ出ます。
そして一番右の最下位bitが空きますので、0を入れます。

結果「1111 1010」を左シフトしたら、「1111 0100」になります。

 

論理シフト演算(符号なし)

論理シフト演算は、符号なしで考えるシフト演算です。

単純にビット列を左右にシフトするだけで最上位や最下位ビットから溢れた値は捨てて、空いたビットには0を挿入します。

符号ビットの値は保持されません。

 

算術シフト演算(符号あり)

算術シフト演算は、符号ありで考えるシフト演算です。

負数を考慮したシフト演算で、符号ビットはシフトしません
右算術シフト演算では、空いたビットには符号ビットと同じ数値を挿入します。

負数を2倍もしくは1/2倍にすることが可能です。

 

なつめ
右シフトの場合が特殊だから、例題で詳しく説明するよ

例題

「1111 1000(8bit)」を2bit右シフト算術演算する

算術演算は符号ありで考えるので、最上位ビット(符号ビット)はそのまま固定にしておきます。

残り7bitを、2bit右シフトします。
左側の空いたビットには、符号ビットと同じ数値を追加します。

右側の8bitから溢れ出た数値(今回の場合「00」)は、論理シフト演算と同様に捨ててしまいます。

結果「1111 1000」を2bit右シフト算術演算したら、「1111 1110」になります。

 

2進数の掛け算(乗算)

なつめ
乗算は、基本的に加算とシフト演算の組み合わせで実行されるよ

 

2進数での乗算も、「10進数を経由する方法①」「2進数のまま計算する方法②」の2種類があります。

 

2進数の掛け算(乗算)方法 ①

  • 問題文の2進数を10進数へ変換する
  • 10進数で計算する
  • 計算の答えを2進数へ変換する

 

2進数の掛け算(乗算)方法 ②

  • 2進数のまま、直接掛け算して計算する

 

なつめ
それじゃあ、例題を出してみます!

例題

1001 × 0011 = ?

 

まず、10進数を経由する方法①から解いていきます。

  1. 最初に、問題文の2進数を10進数へ変換します


    1001(2進数)= 9(10進数)
    0011(2進数)= 3(10進数)

  2. 次に、変換した10進数で計算します


    9 × 3 =  27

  3. 最後に、計算した答えを2進数へ変換します


    27(10進数)= 11011(2進数)

2進数と10進数の変換方法が分からない方は、こちらをクリック!

参考  2進数と10進数の変換方法を確認

 

慣れてきたら、2進数のまま計算する方法②を使ってみましょう。

10進数で掛け算する際と同じ要領で計算していきます。

計算を楽で簡単にするコツは、掛ける数(今回の場合「0011」が0の時数値がなしになり、1の時は掛けられる数(今回の場合「1001」)がそのままの数値で当てはめることができる点です。

 

2進数の割り算(除算)

なつめ
除算は、基本的に減算とシフト演算の組み合わせで実行されるよ

 

2進数での除算も、「10進数を経由する方法①」「2進数のまま計算する方法②」の2種類があります。

 

2進数の割り算(除算)方法 ①

  • 問題文の2進数を10進数へ変換する
  • 10進数で計算する
  • 計算の答えを2進数へ変換する

 

2進数の割り算(除算)方法 ②

  • 2進数のまま、直接掛け算して計算する

 

なつめ
それじゃあ、例題を出してみます!

例題

1001 ÷ 0011 = ?

 

まず、10進数を経由する方法①から解いていきます。

  1. 最初に、問題文の2進数を10進数へ変換します


    1001(2進数)= 9(10進数)
    0011(2進数)= 3(10進数)

  2. 次に、変換した10進数で計算します


    9 ÷ 3 =  3

  3. 最後に、計算した答えを2進数へ変換します


    3(10進数)= 0011(2進数)

2進数と10進数の変換方法が分からない方は、こちらをクリック!

参考  2進数と10進数の変換方法を確認

 

慣れてきたら、2進数のまま計算する方法②を使ってみましょう。

10進数の時と同じように筆算していきましょう。

なつめ
計算を簡単にするコツを教えるニャ!

それぞれ割られる数の中に割る数値が入れば「1」
入らなければ「0」になります。

割り算の中は、引き算をしましょう。

 

簡単に計算できる?計算方法のコツ

ねこ
2進数の計算ってなんだか難しいにゃあ…
2進数の計算が難しく感じるのは、慣れていないからが大きいと思うニャ!
なつめ

 

普段10進数を使用している私たちにとって、2進数表現は慣れなくて難しく感じるかもしれません。

しかし本記事での計算手順をしっかり理解して、反復練習したら大丈夫です!
それぞれ計算のコツやポイントも押さえて解説していますので、慣れるまで練習していきましょう。

 

なつめ
2進数の計算について、まとめていくニャ!
  • 2進数での計算方法は、「10進数を経由する方法」と「2進数のまま計算する方法」の2種類がある

 

  • 負数の表現では、2の補数が使用されることが多い

 

  • 「符号なし整数」と「符号付き整数」があり、符号がある場合は最上位ビットが符号になる

 

  • シフト演算で、元の数を2倍や1/2倍することができる

 

最後までお読みいただき、ありがとうございます!

-コンピュータの基礎知識

Copyright© 未経験からエンジニアBLOG , 2021 All Rights Reserved.