【基本情報】2進数の計算-1

【基本情報】2進数の計算-1

今回は、2進数の計算方法(足し算・引き算・シフト演算)についての解説です。

1. 足し算

まずは、なじみのある10進数の考え方でおさらいしてみましょう。

10進数の足し算の図解

10進数の場合、一つの桁(箱)に入る数字は「9」までです。
上記の式で言うと、1の位は合計が10になるため、あふれて次の位に「1」繰り上がりします。
これを踏まえて計算すると、答えは250となります。

 

では、2進数になるとどうなるでしょうか?

2進数の足し算の図解

2進数の場合、一つの桁(箱)に入る数字は「1」までです。「2」になった時点で桁あふれします。
上記の式で言うと、1の位は合計が2になるため、次の位に繰り上がりします。
同様のルールで次の位の計算を進めていくと、答えは1101100となります。

 

2. 引き算(補数表現)

実は、コンピュータは「足し算」しかできません。
そこで、引き算を足し算の形で処理するために考え出されたのが「補数表現」です。

10進数の補数

「引く」代わりに「足すと桁上がりしてゼロに戻る数」を使います。
(例)3桁の数字「123」に対する補数

  • あといくつ足せば繰り上がりせず最大値(999)になるか? → 876(9の補数)
  • あといくつ足せば繰り上がりするか(1000になるか)?  → 877(10の補数)

10進数の補数の図解

2進数の補数

2進数でも考え方は同じです。ビットを反転させるのがポイントです。
(例)4桁の2進数「0011」に対する補数

  • あといくつ足せば最大値(1111)になるか? → 1100(1の補数:ビット反転)
  • あといくつ足せば繰り上がりするか?     → 1101(2の補数:+1する)

2進数の補数の図解

3. 論理シフト

論理シフトとは、ビット列を左右にズラす際、「符号(プラス・マイナス)を一切気にせず、空いた場所に必ず『0』を入れる」やり方です。
画像処理やフラグ管理など、符号のないデータを扱う際に使われます。

基本的なルールは以下の通り、非常にシンプルです。

     

  1. すべてのビットをそのまま指定された方向にズラす。(符号ビットも特別扱いしません)

  2.  

  3. 空いたスペースには常に 0 を入れる。

ポイント: 「算術シフト」とは異なり、符号ビットの保護やオーバーフローを気にする必要はありません。「空いたら0を埋める」と覚えればOKです。

8ビットの2進数 1100 1010 を例に実際に計算してみましょう。

① 論理「左」シフト

すべてのビットを左にずらし、右側の空いた場所に0を入れます。

  • 元の値:1100 1010
  • 左シフト後:1001 0100

※左端の1は押し出されて消え、右端には0が補充されます。

② 論理「右」シフト

すべてのビットを右にずらし、左端の空いた場所に0を入れます。

  • 元の値:1100 1010
  • 右シフト後:0110 0101

※右端の0は押し出されて消え、左端には0が補充されます。

今回のまとめ

用語 意味・ポイント
2進数の足し算 「2」になったら隣の桁へ繰り上がりする
補数(2の補数) 引き算を足し算で行うための表現。「反転して+1」で作れる
論理シフト 符号を無視してビットをズラすこと。空いた場所は必ず「0」
論理シフトの用途 画像データや符号なし整数の倍数・除算計算など