1. 65 -> A
  2. 90 -> Z
  3. 97 -> a
  4. 122 -> z
  5. 48 -> 0
  6. 57 -> 9
  7. 32 -> space
コース一覧
コンピューターサイエンス入門:理論編
コード → 文字

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

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分

コード → 文字

番号は出せても、画面には出せない

前回、文字から番号を取り出せるようになりました。ところが計算した結果を人に見せる段になると、手が止まります。68 という数を出したところで、読む人には D だとは分かりません。行きがあるなら、帰りも要ります。

番号から文字へ戻す道具も、どの言語にも用意されています。行きの道具と対になっているので、片方を覚えればもう片方も思い出せます。

往復させると、必ず元へ戻る

文字を番号にして、その番号を文字に戻すと、元の文字になります。逆に番号から文字を作って、その文字の番号を取り直しても、元の番号です。この往復が保証されているおかげで、途中の処理を安心して整数のまま進められます。

番号が連続していることも、そのまま使えます。A の番号に 0 から 25 を順に足していけば、アルファベット 26 文字がひと通り作れます。対応表をコードに書き写さなくても、開始位置と個数だけで並びを組み立てられる、というのが文字を番号で持つことの利点です。Excel の列名や連番の採番も、この形で作られています。

戻す道具は ASCII 専用ではありません。0x3042 を渡せば あ が出てきます。番号の対応表が ASCII の外まで続いているだけで、やっていることは何も変わりません。

26 で折り返す

番号にして計算する典型が、文字をずらす暗号です。A を 3 つ進めて D にするだけなら、番号に 3 を足せば済みます。困るのは端です。Z に 3 を足すと番号は 93 になり、これは ] という記号になってしまいます。

アルファベットは 26 文字で輪になっているので、A からの距離を 26 で割った余りに直してから、A の番号に足し直します。

Python

base = 65 # A の番号 i = 23 # X は A から数えて 23 番目 print((i + 3) % 26) # 0 A に戻ってきた print(base + (i + 3) % 26) # 65

同じ形は、12 時間表記や曜日の計算でも出てきます。輪になっているものは余りで扱う、と覚えておくと使い回せます。

範囲の外を渡すと、静かに壊れる

戻す道具は、渡された番号が正しいかどうかを検算してくれません。負の数や大きすぎる数を渡したとき、エラーで止まる言語もあれば、下位のビットだけを見て別の文字を返す言語もあります。

危ないのは後者です。例外が出ないので、化けた文字がそのまま保存され、あとから元の値をたどれなくなります。計算でずらしたあとの番号は、道具に渡す前に想定の範囲へ収まっているかを確かめてください。

要件

  1. 整数を受け取り 1 文字の文字列を返す
  2. ASCII 範囲 (0..127) を扱う
  3. 戻り値の長さは 1

入出力例

codeToChar(65) → "A" codeToChar(90) → "Z" codeToChar(97) → "a" codeToChar(122) → "z" codeToChar(48) → "0" codeToChar(57) → "9" codeToChar(32) → " "

ヒント

Python は chr(n) を使います

JavaScript は String.fromCharCode(n) を使います

Java は (char) n を String.valueOf でラップします

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

関連レッスン

  • UTF-8 のバイト長を返す

    1 つの Unicode コードポイントを受け取り、UTF-8 に符号化したときのバイト数を返す関数を実装します。

  • AND / OR の真理値表

    2 つの真偽値 (0/1) を受け取り、AND と OR の結果を 2 ビットに詰めた整数で返す関数を実装します。論理演算の基礎を手で動かして確認します。

  • NOT / XOR の真理値表

    2 つの真偽値 (0/1) を受け取り、NOT a と a XOR b の結果を 2 ビットに詰めた整数で返す関数を実装します。

  • 含意 (→) を AND/OR/NOT で表現

    論理学の含意 a → b を AND/OR/NOT の組み合わせで実装し、0/1 で返す関数を作ります。「a ならば b」の真偽の不思議さも体感します。

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

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

  • 処理計算や代入を表す長方形
  • ビット2進数の1桁。0 か 1 のどちらか
  • 戻り値呼び出し元への返答を表す点線矢印
main.py
学習モード
エディタを読み込んでいます

メモ

コード → 文字

⌘S で保存