エクセル雑感
2の補数表現で表された負の2進数を10進数に変換する方法

ExcelマクロVBAとエクセル関数についての私的雑感
公開日:2025-10-27 最終更新日:2025-10-27

2の補数表現で表された負の2進数を10進数に変換する方法


■問題

8ビットの2の補数表現で表された2進数「11000100」が示す値を、10進数で表したものとして正しいものを、次の中から選びなさい。
・68
・196
・-60
・-68


以下で正解だけではなく、補数の基本から順に説明していきます。



■1の補数

1の補数は「各桁のビットを反転させたもの」です。
元の数と1の補数を足すと、全桁が1になります。
求め方は、各桁のビットを反転させます。
(0を1に、1を0にする)
01010011 :元の数
10101100 :1の補数
11111111 :合計

■2の補数

2の補数は「1の補数に1を足したもの」です。
元の数と2の補数を足すと、最上位桁で桁上がりが発生し、それ以外の桁はすべて0になります(実質的に0として扱える)。
求め方: 1の補数に1を加えます。
01010011:元の数
10101100:1の補数
10101101:2の補数
(1)00000000:2の補数+元の数(実質0)

■負数には2の補数を使うのは

負の数を表現するために2の補数が選ばれるのは、以下の2つの大きな利点があるからです。
1. 引き算を足し算で処理できる
2. ゼロの表現が一意である

1. 引き算を足し算で処理できる
コンピュータの設計において、加算回路(足し算をするための回路)を一つ作るだけで、減算(引き算)も処理できることが最大の利点です。
通常の計算: A - B
コンピュータ内の処理: A + (-B)
ここで、負の数 (-B) を表現するために2の補数が使われます。
具体例(イメージ):10進数で「5 - 3」を計算したい場合、コンピュータは 5 に 3 の2の補数(-3 の役割)を足します。
  1. まず 3 の2の補数を求める。(これが -3 を表す)
  2. 5 + (3の2の補数) を計算する。
  3. 結果は 2 になる。
このように、「A に B の2の補数を足す」操作だけで引き算が実現できるため、減算専用の複雑な回路を別に用意する必要がなく、ハードウェアの構成がシンプルになり、効率的です。

2. ゼロの表現が一意である
「ゼロ」の表現が一つしかないことも、2の補数表現の非常に重要な利点です。
  • 2の補数表現: 00000000(すべての桁が 0)のみがゼロを表します。
  • 他の負数表現(例:1の補数表現): 0 と -0 の2通りのゼロが存在する場合があります。
    例 (8ビット): 正のゼロ (00000000) と 負のゼロ (11111111)
ゼロが複数あると困ること
  • 回路が複雑になる: 計算結果がゼロかどうかを判定する際に、00000000 と 11111111 の両方をチェックしなければならず、回路(論理)が複雑になります。
  • データの扱いに一貫性がない: 同じ「ゼロ」なのに、表現が違うデータが存在すると、プログラム上での混乱やエラーの原因となります。
2の補数表現では、ゼロが 00000000 に一意に定まるため、計算結果の判定やデータの処理が極めてシンプルになり、効率よくコンピュータを動作させることができます。

■そもそも負の数とは

ある数と足し合わせるとゼロになるという性質によって定義される。
つまり、
A + (-A) = 0
元の数 + 2の補数 = 0
01010011:元の数
10101101:2の補数
(1)00000000:2の補数+元の数(実質0)
つまり、2の補数を負数として扱うと都合が良かったということ。

■2の補数「11000100」を10進数に変換する

まず、符号を確認する。
与えられた2進数の最上位ビット(左端)を確認します。
11000100 の最上位ビットは 1 です。
2の補数表現において、最上位ビットが 1 の場合は負の数を示します。

次に絶対値(元の正の数)を求める。
負の数を元の正の数に戻すには、2の補数を求めます。
※2の補数の2の補数は元の数に戻る。
・2の補数:1の補数に1足して2の補数にする。
元の数:「11000100」
1の補数:「00111011」
2の補数:「00111100」
2^5 + 2^4 + 2^3 + 2^2 = 60
正解は負数の60、つまり、
-60

■2の補数表現で覚えるべきこと

1の補数:ビット反転(0を1に、1を0に)させたもの。2の補数:1の補数に 1を加えた もの。
最上位ビット:符号ビット(0なら正、1なら負)。
これだけ覚えておけば十分です。

8ビット2の補数表現で表せる値の範囲
8ビット(2^8 = 256 通り)の2の補数表現では、負の数を表現するために最大値が制限されます。
最小値 (最大の負の数): -2^(n-1) → -2^(7) = -128 (2進数: 10000000)
最大値 (最大の正の数): 2^(n-1) - 1 →2^(7) - 1 = 127 (2進数: 01111111)
これにより、8ビット2の補数で表現できる範囲は -128 から 127 までとなります。

もう一つの計算方法(負の重み付け)
負の数であることを確認したら、最上位ビット(符号ビット)に -(2^(n-1)) の重みを割り当てて、直接計算することもできます。
8ビットの場合、最上位ビットは -128 の重みを持ちます。
11000100 の各ビットを重み付けして計算すると
最上位ビット: 1 * (-128) = -128
残りの7ビット: 1 * 64 + 0 * 32 + 0 * 16 + 0 * 8 + 1 * 4 + 0 * 2 + 0 * 1 = 68
合計: -128 + 68 = -60
この方法でも、同じ -60 という結果が得られ、検算にも利用できます。




同じテーマ「エクセル雑感」の記事

情報システムとは:業務ルールでデータを処理する仕組みです。
変数名に意味は本当に必要か? 層ごとに変わる重要性
脱Excelか、真のExcel活用か:現場実態の二者択一
【スピルの勧め】スピル数式と生成AIが変えるExcel業務の新標準
2の補数表現で表された負の2進数を10進数に変換する方法
非正規化(カンマ区切り)の結合と集計:最適な手法は?
セル数式における「再帰」の必要性
GrokでVBAを作成:条件付書式を退避回復するVBA
顧客ごとの時系列データから直前の履歴を取得する
ちょっと悩むVBA厳選問題
【何かの情報試験に出るかもしれない問題】4択クイズ


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ