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か、真の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.
