2の補数表現で表された負の2進数を10進数に変換する方法
■問題
・68
・196
・-60
・-68
以下で正解だけではなく、補数の基本から順に説明していきます。
■1の補数
元の数と1の補数を足すと、全桁が1になります。
求め方は、各桁のビットを反転させます。
(0を1に、1を0にする)
01010011 :元の数
10101100 :1の補数
11111111 :合計
■2の補数
元の数と2の補数を足すと、最上位桁で桁上がりが発生し、それ以外の桁はすべて0になります(実質的に0として扱える)。
求め方: 1の補数に1を加えます。
01010011:元の数
10101100:1の補数
10101101:2の補数
(1)00000000:2の補数+元の数(実質0)
■負数には2の補数を使うのは
1. 引き算を足し算で処理できる
2. ゼロの表現が一意である
通常の計算: A - B
コンピュータ内の処理: A + (-B)
ここで、負の数 (-B) を表現するために2の補数が使われます。
- まず 3 の2の補数を求める。(これが -3 を表す)
- 5 + (3の2の補数) を計算する。
- 結果は 2 になる。
- 2の補数表現: 00000000(すべての桁が 0)のみがゼロを表します。
- 他の負数表現(例:1の補数表現): 0 と -0 の2通りのゼロが存在する場合があります。
例 (8ビット): 正のゼロ (00000000) と 負のゼロ (11111111)
- 回路が複雑になる: 計算結果がゼロかどうかを判定する際に、00000000 と 11111111 の両方をチェックしなければならず、回路(論理)が複雑になります。
- データの扱いに一貫性がない: 同じ「ゼロ」なのに、表現が違うデータが存在すると、プログラム上での混乱やエラーの原因となります。
■そもそも負の数とは
つまり、
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の補数表現で覚えるべきこと
最上位ビット:符号ビット(0なら正、1なら負)。
これだけ覚えておけば十分です。
最小値 (最大の負の数): -2^(n-1) → -2^(7) = -128 (2進数: 10000000)
最大値 (最大の正の数): 2^(n-1) - 1 →2^(7) - 1 = 127 (2進数: 01111111)
これにより、8ビット2の補数で表現できる範囲は -128 から 127 までとなります。
8ビットの場合、最上位ビットは -128 の重みを持ちます。
11000100 の各ビットを重み付けして計算すると
残りの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 ・・・新着記事一覧を見る
ITエンジニアのための経理・会計・簿記入門|エクセル雑感(2026-09-12)
「Python in Excel」入門:コードを読むための基礎知識|エクセル関数応用(2026-09-10)
M言語入門:Power Queryのコードを読むための基礎知識|Power Query(M言語)入門(2026-09-09)
Excelの正規表現関数(REGEXTEST・REGEXREPLACE・REGEXEXTRACT)の使い方|エクセル関数応用(2026-09-08)
スピルとVBA(Formula2とスピル範囲の取得)|VBA入門(2026-09-08)
「Withの功罪」:コードを読みやすくする強力な道具と、その落とし穴|VBA技術解説(2026-09-03)
可変長配列をVSTACKする4つの方法|REDUCE・Thunk・チャンク・再帰分割|エクセル関数応用(2026-09-01)
Excel表とMarkdownテーブルを相互変換する数式|エクセル関数応用(2026-08-24)
「Python in Excel」数独(ナンプレ)解法プログラムの移植と最適化|エクセル関数応用(2026-08-14)
「Python in Excel」で自作関数を登録|アンピボット関数と計算順序|エクセル関数応用(2026-08-12)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.Excelショートカットキー一覧|Excelリファレンス
5.RangeとCellsの使い方|VBA入門
6.FILTER関数(範囲をフィルター処理)|エクセル入門
7.マクロとは?VBAとは?VBAでできること|VBA入門
8.繰り返し処理(For Next)|VBA入門
9.メッセージボックス(MsgBox関数)|VBA入門
10.セルのコピー&値の貼り付け(PasteSpecial)|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.
