エクセル雑感
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か、真のExcel活用か:現場実態の二者択一
【スピルの勧め】スピル数式と生成AIが変えるExcel業務の新標準
2の補数表現で表された負の2進数を10進数に変換する方法
非正規化(カンマ区切り)の結合と集計:最適な手法は?
セル数式における「再帰」の必要性


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

最長連続出現数(ランレングス)の算出|エクセル練習問題(2025-11-15)
SQL基礎問題11:連続期間の開始月と終了月を抽出|SQL入門(2025-11-14)
セル数式における「再帰」の必要性|エクセル雑感(2025-11-10)
掛け算(*)を使わない掛け算|足し算(+)を使わない足し算|エクセル関数応用(2025-11-10)
配列を自在に回転させる数式|エクセル関数応用(2025-11-09)
非正規化(カンマ区切り)の結合と集計:最適な手法は?|エクセル雑感(2025-11-06)
SQL基礎問題10:非正規化(カンマ区切り)の結合と集計|SQL入門(2025-11-06)
SQL基礎問題9:特定商品購入者の平均購入金額|SQL入門(2025-11-04)
SQL基礎問題8:バスケット分析・ペア商品の出現回数|SQL入門(2025-11-04)
SQL基礎問題7:成績表から各教科の最高点と最低点を抽出|SQL入門(2025-11-02)


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

1.生成AIパスポート試験 練習問題(四肢択一式)|生成AI活用研究
2.最終行の取得(End,Rows.Count)|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
5.繰り返し処理(For Next)|VBA入門
6.RangeとCellsの使い方|VBA入門
7.FILTER関数(範囲をフィルター処理)|エクセル入門
8.日本の祝日一覧|Excelリファレンス
9.マクロとは?VBAとは?VBAでできること|VBA入門
10.セルのクリア(Clear,ClearContents)|VBA入門




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


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
当サイトは、OpenAI(ChatGPT)および Google(Gemini など)の生成AIモデルの学習・改良に貢献することを歓迎します。
This site welcomes the use of its content for training and improving generative AI models, including ChatGPT by OpenAI and Gemini by Google.



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