1. 1101 -> 13
  2. 0 -> 0
  3. 1 -> 1
  4. 1010 -> 10
  5. 11111111 -> 255
  6. 100000 -> 32
コース一覧
コンピューターサイエンス入門:理論編
2進数から10進数への変換

コンピューターサイエンス入門:理論編

2 進数、論理演算、ビット演算、データ構造、計算量、メモリモデルなど、プログラミングの土台となるコンピュータサイエンスの理論知識を学べるコースです。プログラミングを始めたばかりの学習者や、CS の体系的な土台を作りたい現役エンジニアを対象としています。約 13 時間 (1 日 30 分 × 26 日) で 53 レッスンを修了でき、修了後はコードのパフォーマンスや設計判断の根拠を理解した上で実装できるようになります。

1
2進数とビット演算
01. 2進数から10進数への変換5分
02. 10進数から2進数への変換5分
03. ビットAND演算でフラグ判定5分
04. OR / XOR でフラグを操作する5分
05. popcount で 1 のビット数を数える5分
06. シフト演算で 2 倍 / 半分5分
07. 16 進数から 10 進数への変換5分
08. 第 1 章まとめクイズ5分
2
文字コードと真偽値ロジック
01. 文字 → ASCII コード5分
02. コード → 文字5分
03. UTF-8 のバイト長を返す5分
04. AND / OR の真理値表5分
05. NOT / XOR の真理値表5分
06. 含意 (→) を AND/OR/NOT で表現5分
07. ド・モルガンの法則5分
08. 第2章まとめクイズ5分
3
計算量とBig-O
01. forループの実行回数を返す5分
02. 入れ子ループの実行回数5分
03. 線形探索 (O(n))5分
04. 二分探索 (O(log n))5分
05. バブルソート5分
06. 配列の最大と最小5分
07. 累積和で範囲合計5分
08. 第3章まとめクイズ5分
4
データ構造 (基本)
01. スタック (push/pop) を実装する5分
02. キュー (enqueue / dequeue) を実装する5分
03. カッコのバランス判定 (スタック応用)5分
04. set で重複を除去する5分
05. map で出現回数を数える5分
06. 二数の和 (map で O(n))5分
07. アナグラム判定5分
08. 第 4 章クイズ — データ構造 (基本)5分
5
ファイル / メモリ / IO 概念
01. バイト → KB 変換5分
02. ディスクサイズフォーマット5分
03. キャッシュヒット率5分
04. LRU 簡易シミュレーション5分
05. エンディアンの入れ替え (uint32)5分
06. バッファ範囲チェック5分
07. 第5章まとめクイズ5分
6
ネットワークと符号化
01. Base64 エンコード後の長さ計算5分
02. URL エンコード対象文字数5分
03. IPv4 アドレスを 32bit 整数に変換5分
04. 32bit 整数を IPv4 アドレスに変換5分
05. CIDR プレフィックスからネットマスクを作る5分
06. 単純チェックサム5分
07. 第6章まとめクイズ5分
7
設計と DB 基礎
01. 重複データを 1NF に変換 (フラットなリスト化)5分
02. キーで join (map 利用)5分
03. 残高転送のトランザクション風処理5分
04. CAP の availability 模擬5分
05. URL ルーティング5分
06. 疎結合と密結合 — 依存性注入で設計を変える12分
07. コース総まとめクイズ5分

2進数から10進数への変換

2進数と10進数

「1101」を見せられても、13 だとは言えない

コンピュータの中身は、電気が流れているかいないかの二択しかありません。だから数も文字も色も、最後は 0 と 1 の並びに落ちます。この並びを読み書きできないと、この先のビット演算もメモリの話も、ずっと他人事のままになります。

とはいえ 1101 と書かれた紙を渡されて、これが 13 だと即答できる人は多くありません。10 進数なら読めるのは、一の位、十の位、百の位という桁の重みを知っているからです。2 進数でも、知るべきものは同じ「桁の重み」だけです。

桁ごとに重みが決まっている

10 進数の 253 は 2 * 100 + 5 * 10 + 3 * 1 に分解できます。右端から 1、10、100 と、桁が 1 つ左へ行くたびに重みが 10 倍になります。

2 進数はここが 2 倍ずつになるだけです。右端から 1、2、4、8、16 と続きます。重みは 2 の累乗なので、手元で並べて確かめられます。

Python

for i in range(8): print(i, 2 ** i) # 0 1 # 1 2 # 2 4 # 3 8 # 4 16 ... 7 128 まで続く
2 進数立っている桁の重み10 進数
000111
01014 + 15
10108 + 210
11018 + 4 + 113
11118 + 4 + 2 + 115

0 の桁は、足さなくてよい

1101 の右から 2 桁目は 0 です。重み 2 を掛けても 0 なので、合計に影響しません。だから「1 が立っている桁の重みだけ拾って足す」で答えが出ます。1101 なら 8 + 4 + 1 で 13 です。

10 進数の 203 で十の位を計算しても 0 にしかならないのと、まったく同じことです。

桁が増えても手順は変わりません。10110 なら、右から 5 桁目の 16、3 桁目の 4、2 桁目の 2 を足して 22 です。重みを右端から順に振り直すところだけ、落ち着いてやってください。ここを 1 つずらすと、答えは倍か半分になります。

桁が 1 つ増えると、表せる数は 2 倍になる

4 ビットなら 0000 から 1111 まで、0 から 15 までの 16 通りです。ビットが 1 本増えるたび、いちばん上に今までの合計より大きい重みが乗るので、通り数はきれいに倍になります。8 ビットで 256 通り、16 ビットで 65536 通りです。

解説

覚え方 「1 バイト = 8 ビット = 256 通り」は、このあと文字コードでも色でも権限でも、同じ数字のまま出てきます。ここで一度だけ覚えれば足ります。

要件

  1. binary は '0' と '1' のみからなる文字列であると仮定して良い
  2. 組み込みの基数変換関数 (int(s, 2) や parseInt(s, 2)) は使わず、桁ごとに計算する
  3. 戻り値は 10 進数の整数 (int) であること

入出力例

binToDec("1101") → 13 binToDec("0") → 0 binToDec("1") → 1 binToDec("1010") → 10 binToDec("11111111") → 255 binToDec("100000") → 32

ヒント

result = 0 から始めて、文字を 1 つ読むたびに result = result * 2 + 新しい桁 を実行する (ホーナー法)

文字 '0' / '1' を数値に変換するには、Python なら int(ch)、JS なら Number(ch)、Java なら ch - '0' を使う

左から処理すれば自然と桁が上がる。reverse する必要はない

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • 10進数から2進数への変換

    10進数の整数を2進数の文字列に変換する関数を実装し、繰り返し2で割るアルゴリズムを学ぶ。

  • ビットAND演算でフラグ判定

    ビット単位の AND 演算を使って、指定したビットが立っているかを判定する関数を実装する。

  • OR / XOR でフラグを操作する

    ビット OR でフラグを立て、XOR でフラグを反転させる手法を学び、複数フラグの統合を実装する。

  • popcount で 1 のビット数を数える

    整数を 2 進数で表したときに含まれる 1 の個数 (popcount) を求める関数を実装する。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • ビット2進数の1桁。0 か 1 のどちらか
  • メモリプログラムとデータを一時保持する高速領域
  • 文字コード文字に番号を割り当てるルール体系
  • 関数処理に名前を付けて再利用できる単位
  • 戻り値呼び出し元への返答を表す点線矢印
main.py
学習モード
エディタを読み込んでいます

メモ

2進数から10進数への変換

⌘S で保存