2進数文字列から10進数への変換
ITパスポートや基本情報技術者試験の受験者、あるいはプログラミング学習を始めたばかりの開発者が最初につまずきやすい関門が「基数変換」です。私たちが日常生活で慣れ親しんでいる「10進数」と、コンピュータが処理の基本とする「2進数」は、一見すると全く異なるルールで動いているように思えます。しかし、変換のメカニズムと計算手順さえ体系的に整理してしまえば、算数レベルの四則演算だけで誰でも確実に正解を導き出すことができます。
この記事では、最も基本的かつ汎用性の高い「すだれ算(連除法)」を用いた整数変換の筆算手順から、試験や実務で差がつく「小数の2倍掛け算法」、現場エンジニアが実践する「2の累乗を活用した高速暗算テクニック」、さらには負の数を扱う「2の補数表現」やExcel・Pythonを用いた実務コードまで、余すところなく徹底的に解説します。
📌 【この記事の重要ポイントまとめ】
- 要点1:整数の変換は「2で割り続けて余りを下から拾う(すだれ算)」、小数は「2を掛けて整数部を上から拾う」のが鉄則。
- 要点2:基本情報技術者試験などの実戦では、2の累乗(1, 2, 4, 8, 16, 32, 64, 128…)を使った「引き算方式」が最速の解法となる。
- 要点3:コンピュータ内部での負の数は「ビット反転+1」の2の補数で表現され、実務ではExcelのDEC2BIN関数やPythonのbin関数で即座に処理可能。
【基礎から実践】10進数から2進数の変換方法と基本の計算手順
コンピュータの回路は、電圧の「高(ON)」と「低(OFF)」という2つの状態しか判別できません。そのため、0から9までの10種類の数字を使う10進数を、0と1の2種類だけで表現する2進数に置き換える必要があります。この「基数変換の計算手順」における基本が、連除法(通称:すだれ算)です。
すだれ算(割り算の余り)を使った筆算ステップ
10進数の整数を2進数に変換する場合、「対象の数値を2で割り、その商をさらに2で割り続け、商が0になるまで余りを記録する」という手順を踏みます。最後に記録した余りを「下から上(逆順)」に並べることで、正しい2進数が完成します。
具体例として、10進数の「25」を2進数に変換してみましょう。
- 25 ÷ 2 = 12 余り 1(最下位ビット:$2^0$の位)
- 12 ÷ 2 = 6 余り 0($2^1$の位)
- 6 ÷ 2 = 3 余り 0($2^2$の位)
- 3 ÷ 2 = 1 余り 1($2^3$の位)
- 1 ÷ 2 = 0 余り 1(最上位ビット:$2^4$の位)
商が0になった時点で計算を終了します。計算結果の余りを最後のステップ(下)から最初のステップ(上)に向かって並べると、「11001」となります。つまり、10進数の25は2進数で「$(11001)_2$」と表されます。
試験会場で多くの初心者が犯す典型的なミスは、「余りを上から順に並べてしまう」ことです。割り算の最初に出た余りは最も桁の重みが小さい「1の位($2^0$)」であり、最後に出た余りこそが最大の重みを持つ桁であることを意識しておくとミスを防げます。

つまずきやすい「小数点」の基数変換|2倍掛け算のメカニズム
整数のすだれ算を理解した学習者が次に壁にぶつかるのが、「10進数から2進数小数点の計算」です。整数部とは全く逆の処理を行うため、解法を混同してしまうケースが後を絶ちません。
小数は「2を掛けて整数部を取り出す」
小数部分の変換では、「小数部に2を掛け、出てきた計算結果の整数部(0または1)を記録し、残った小数部に再び2を掛ける」という操作を繰り返します。記録した整数部は、整数のときとは異なり「上から下(計算順)」に並べます。
例として、10進数の「0.625」を2進数に変換してみます。
- 0.625 × 2 = 1.25 → 整数部の「1」を取り出す(小数第1位:$2^{-1}$の位)。残る小数部は0.25
- 0.25 × 2 = 0.50 → 整数部の「0」を取り出す(小数第2位:$2^{-2}$の位)。残る小数部は0.5
- 0.5 × 2 = 1.00 → 整数部の「1」を取り出す(小数第3位:$2^{-3}$の位)。残る小数部は0
小数部が0になった時点で計算は完了です。取り出した整数部を上から順に並べると、10進数の0.625は2進数で「$(0.101)_2$」となります。
循環小数の罠と丸め誤差の正体
日常生活で身近な「0.1」という10進数は、2進数に変換しようとすると割り切れません。
- 0.1 × 2 = 0.2
- 0.2 × 2 = 0.4
- 0.4 × 2 = 0.8
- 0.8 × 2 = 1.6(残る小数部は0.6)
- 0.6 × 2 = 1.2(残る小数部は0.2 → ステップ2に戻りループ)
結果は「0.0001100110011…」となり、無限にパターンが続く循環小数になります。コンピュータのメモリは有限であるため、どこかの桁で打ち切らざるを得ず、これがプログラミングにおける「丸め誤差(演算誤差)」の原因となります。
【速解テクニック】情報処理技術者試験(FE)を最短で解く「2の累乗引き算」
情報処理技術者試験対策において、すだれ算を愚直に筆算していると計算スペースを消費し、貴重な解答時間を失ってしまいます。実務経験者や試験突破者が実践しているのが、「2の累乗一覧表」を脳内に展開した引き算アプローチです。
| 2のべき乗 | 10進数の値 | ビット位置(桁) | 実務・試験での重要度 |
|---|---|---|---|
| $2^0$ | 1 | 第1ビット(最下位) | 奇数・偶数の判別に直結 |
| $2^1$ | 2 | 第2ビット | 基本単位 |
| $2^2$ | 4 | 第3ビット | 基本単位 |
| $2^3$ | 8 | 第4ビット | ニブル(4bit / 16進数1桁) |
| $2^4$ | 16 | 第5ビット | 頻出 |
| $2^5$ | 32 | 第6ビット | IPアドレス計算(サブネット)で必須 |
| $2^6$ | 64 | 第7ビット | Base64変換の基底 |
| $2^7$ | 128 | 第8ビット(最上位) | 1バイト(8bit)の境界値 |
| $2^8$ | 256 | 第9ビット | ASCII文字数・RGB各色深度の最大値(0〜255) |
引き算による即答テクニック
例えば「156」を2進数に変換する場合、すだれ算を何行も書く必要はありません。
- 156以下の最大の$2^n$を探す → 128($2^7$)が引けるので、$2^7$の桁は「1」(残り:156 - 128 = 28)
- 次は64($2^6$) → 28から引けないので「0」
- 次は32($2^5$) → 28から引けないので「0」
- 次は16($2^4$) → 28から引けるので「1」(残り:28 - 16 = 12)
- 次は8($2^3$) → 12から引けるので「1」(残り:12 - 8 = 4)
- 次は4($2^2$) → 4から引けるので「1」(残り:4 - 4 = 0)
- 残りが0になったため、2($2^1$)と1($2^0$)は「0」
桁を順番に並べるだけで、瞬時に「10011100」という解が導き出せます。試験ではこの計算を紙の片隅に「128 64 32 16 8 4 2 1」と書き出し、引ける場所に1を立てるだけで数秒で処理できるようになります。

2進数・10進数・16進数の相互変換と2の補数(負の数)の完全理解
基数変換は「10進数から2進数」への一方通行だけでは実務に対応できません。2進数から10進数へ戻す計算、人間にとって桁数が多く見づらい2進数を圧縮する「16進数への変換方法」、そして負の数を表現する「2の補数表現」の3つをセットで理解しておく必要があります。
2進数から10進数・16進数への変換ルール
【2進数から10進数への変換】
各ビットの「1」が立っている桁の重み($2^n$)をすべて足し合わせるだけで完了します。
例:$(1101)_2$ = $(1 \times 2^3) + (1 \times 2^2) + (0 \times 2^1) + (1 \times 2^0) = 8 + 4 + 0 + 1 = \mathbf{13}$
【16進数への変換方法】
2進数は「下位桁から4ビットずつ区切る」だけで16進数(0〜9, A〜F)に直結します($2^4 = 16$のため)。
例:$(11101011)_2$ を4ビットずつに分割 → 「1110」と「1011」
・$1110 = 8 + 4 + 2 + 0 = 14 \rightarrow \mathbf{E}$
・$1011 = 8 + 0 + 2 + 1 = 11 \rightarrow \mathbf{B}$
よって、16進数表記では「EB」(または0xEB)となります。
コンピュータが負の数を扱う「2の補数表現」
コンピュータの演算回路(加算器)は引き算ができません。そのため、「負の数を足す」ことで減算を実現しています。その負の数を作り出す仕組みが「2の補数」です。
8ビットの環境で「$-5$」を2の補数で作成する手順は以下の通りです。
- 絶対値「5」を2進数8ビットで表す:
00000101 - 全ビットを反転させる(1の補数):
11111010 - 最下位ビットに「1」を加算する(2の補数):
11111011
これにより、例えば「$7 - 5 = 2$」という計算を、「$7 + (-5)$」の加算処理で実行できます。
00000111 (7) + 11111011 (-5) = 100000010
8ビットから溢れた最上位の1(桁あふれ)を破棄すると、残りは「00000010」(10進数の2)となり、正しい計算結果が得られます。
実務を加速するツール活用術|Excel関数とPythonコードによる自動変換
業務でのデータ分析やネットワーク設計、組み込み開発などでは、手計算ではなくスプレッドシートやスクリプトを用いた自動化が不可欠です。
Excelでの進数変換関数
Excelには進数変換専用のワークシート関数が標準搭載されています。
- 10進数を2進数に変換:
=DEC2BIN(数値, [桁数])
例:=DEC2BIN(25)→11001(第2引数に8を指定すると00011001とゼロ埋め表示) - 2進数を10進数に変換:
=BIN2DEC(文字列/数値)
例:=BIN2DEC(11001)→25 - 10進数を16進数に変換:
=DEC2HEX(数値)
※実務上の注意点:DEC2BIN関数は「$-512$から$511$」までの範囲しか扱えません(10ビット制限)。512以上の大きな数値を扱う場合は、=BASE(数値, 2)関数を使用するのが現代の標準的な回避策です。
Pythonによる進数変換コード
Pythonでは組み込み関数やフォーマット文字列を使って極めて柔軟に進数変換を行えます。
# 10進数から2進数への変換 num = 25 bin_str = bin(num) # '0b11001' (接頭辞 0b が付与される) bin_clean = format(num, 'b') # '11001' (接頭辞なし) bin_8bit = format(num, '08b')# '00011001'(8桁ゼロ埋め) dec_num = int('11001', 2) # 25 # 負の数の2進数表現(8ビットの2の補数) neg_num = -5 twos_comp = format(neg_num & 0xFF, '08b') # '11111011' print(f"25の2進数: {bin_clean}") print(f"-5の8ビット補数: {twos_comp}") 
一般に知られていない盲点と現場エンジニアが直面する罠
基数変換の理論を学んだ後でも、現場の開発現場では思わぬバグに直面することがあります。特に初心者が陥りがちな「数値の同一性に関する誤解」を整理しておきましょう。
「0.1 + 0.2 == 0.3」がFalseになる理由
多くのプログラミング言語(JavaScript, Python, C言語など)で 0.1 + 0.2 == 0.3 を判定させると、結果は False と返されます。前述の通り、10進数の「0.1」や「0.2」は2進数では循環小数となり、IEEE 754標準の浮動小数点数(64ビット倍精度など)に格納される際に末尾が丸められます。
その結果、内部計算では 0.1 + 0.2 = 0.30000000000000004 となり、0.3と完全一致しなくなります。金融取引やECサイトの決済ロジックなど、1円・1セントのズレも許されない領域では、通常の浮動小数点型ではなく、10進数を正確に処理する「Decimal型(固定小数点)」を採用するのが業界の鉄則です。
【プロの結論】おすすめできる人・慎重になるべき人の判断基準
基数変換の習熟方法は、学習の目的によってアプローチを変える必要があります。
- すだれ算の反復練習に集中すべき人:ITパスポートや基本情報技術者試験の初学者。まずは手書きで割り算・掛け算の筆算ロジックを体に叩き込むことで、ケアレスミスを根絶できます。
- 2の累乗暗記とツール活用に移行すべき人:実務でIPアドレスのサブネットマスク計算を行うインフラエンジニアや、ビット演算を多用する組み込み開発者。手計算に固執せず、2のべき乗テーブルの暗記とPython/Excelによる検算環境を構築することが業務スピード向上に直結します。
【10 進数 から 2 進数】に関するよくある質問(FAQ)
Q1:すだれ算(連除法)で筆算するとき、余りを下から読むのか上から読むのか忘れてしまいます。確実な覚え方はありますか?
A1:「最後に計算した商と余り(一番下)が、最も大きな位(最上位ビット)」と覚えてください。例えば、25を2で割った最初の余り「1」は、25が奇数であることを示す「1の位($2^0$)」です。したがって、最初に出た余りが右端(最下位)、最後に出た余りが左端(最上位)になるため、自然と「下から上へ拾う」ことになります。
Q2:小数の変換で、いつまで2を掛けても計算が終わりません。どこで止めればいいですか?
A2:10進数の小数(例:0.1や0.3など)は、2進数にすると循環小数(無限ループ)になるケースが多々あります。試験問題では「小数第4位まで求めよ」や「5ビットで丸めよ」といった指定があるため、指定された桁数+1桁まで計算して四捨五入(0なら切り捨て、1なら切り上げ)を行います。
Q3:なぜ16進数はプログラミングでこれほど頻繁に使われるのですか?
A3:2進数は人間にとって桁数が多すぎて視読性が悪く(例:11111111)、10進数ではコンピュータのメモリ構造(バイト単位)との対応が分かりにくいためです。16進数なら「2進数の4ビット=16進数の1桁」として綺麗に対応し、1バイト(8ビット)を常に「FF」のように2桁で簡潔に表現できるため、カラーコード(#FFFFFF)やメモリアドレスの表記に最適だからです。
まとめ:基数変換をマスターしてコンピュータの本質を掴む
10進数から2進数への変換は、単なる算数のパズルではなく、ハードウェアとソフトウェアがデータをやり取りする根源的なロジックそのものです。
整数の「すだれ算(連除法)」と小数の「2倍掛け算法」という基本原則を確実に押さえた上で、2の累乗を用いた引き算暗算や16進数との連携を身につければ、各種情報処理試験の得点源になるだけでなく、実務におけるデバッグやパフォーマンスチューニングの場面でも強力な武器となります。まずは身の回りにある数値(自分の年齢や日付など)を使って、紙とペンで変換練習を始めてみてください。 (出典: 10 進数 から 2 進数(Yahoo!ニュース))