1. 大文字 A
  2. 大文字 Z
  3. 小文字 a
  4. 小文字 z
  5. 数字 0
  6. 数字 9
  7. スペース
コース一覧
コンピューターサイエンス入門:理論編
文字 → ASCII コード

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

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分

文字 → ASCII コード

すべては数字

メモリには、文字そのものは入らない

メモリに入るのは 0 と 1 の並びだけです。A という形をそのまま置くことはできません。それでも画面に A が出るのは、「この番号は A ということにする」という取り決めがあるからです。

その取り決めのうち、いちばん古くて基本になるのが ASCII です。英数字と記号あわせて 128 種類に、0 から 127 までの番号を割り当てています。A が 65、a が 97、文字としての 0 が 48。プログラムから見れば、文字は小さな整数で、文字列はその整数の並びでしかありません。

番号が連続しているから、比較に意味が出る

番号は適当に振られたわけではなく、A から Z、a から z、0 から 9 がそれぞれ連続するように並んでいます。だから文字の大小比較が、そのまま辞書順として使えます。

Python

print('a' < 'b') # True print('Z' < 'a') # True 大文字のほうが番号が小さい print(sorted(['banana', 'Apple', 'cherry'])) # ['Apple', 'banana', 'cherry']

Apple が先に来たのは、A が 65 で b が 98 だからです。人間の感覚では大文字も小文字も同じ文字ですが、番号の世界では 32 も離れています。名前の一覧を並べたとき、大文字始まりだけ上に固まるのはこれが理由です。

連続しているおかげで、引き算にも意味が出ます。文字の 5 から文字の 0 を引くと 5。文字コードの世界では、数字を数に直す手当てがこれで済みます。

32 の差は、1 ビットの差

a の 97 から A の 65 を引くと 32 です。32 は右から 6 桁目の重みそのものでした。2 進数で並べてみます。

プレーンテキスト

A -> 100 0001 a -> 110 0001

違うのは 1 桁だけです。大文字と小文字の切り替えが、その 1 ビットを立てるか落とすかで済むのは、番号の振り方がそう作られているからです。第 1 章のマスクが、そのまま文字の世界でも効きます。

番号を取り出す道具は、言語ごとに名前が違う

どの言語にも、文字を受け取ってその番号を返す道具が用意されています。名前は言語ごとに違い、渡し方も、文字列の何番目を見るかを指定するものと、1 文字だけを受け取るものに分かれます。使う言語のものを 1 つ調べてください。

共通しているのは、見るのが 1 文字だけだという点です。2 文字以上を渡すと、エラーで止まる言語と、先頭だけ見て黙って通る言語があります。厄介なのは後者で、AB を渡して 65 が返っても、それは B が無視されただけです。

要件

  1. 1 文字を受け取り整数で返す
  2. ASCII 範囲の文字に対応する
  3. 戻り値の型は int

入出力例

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

ヒント

Python は ord(s) で取り出せます

JavaScript は s.charCodeAt(0) を使います

Java は (int) s.charAt(0) でキャストできます

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

関連レッスン

  • コード → 文字

    整数 (ASCII コード) を受け取り、対応する 1 文字を返す関数を実装します。文字コードから文字への逆変換を 4 言語で書きます。

  • 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 ビットに詰めた整数で返す関数を実装します。

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

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

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

メモ

文字 → ASCII コード

⌘S で保存