1. 0 は "0.0 B"
  2. 500 は "500.0 B"
  3. 1024 は "1.0 KB"
  4. 1500 は "1.5 KB"
  5. 1048576 は "1.0 MB"
  6. 1073741824 は "1.0 GB"
コース一覧
コンピューターサイエンス入門:理論編
ディスクサイズフォーマット

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

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分

ディスクサイズフォーマット

一覧に 12345678 と出ていると、読む側は毎回桁を数えることになります。11.8 MB と書いてあれば一目です。数字を見て単位を選び、文字列にして返すのが今回の仕事です。

単位ごとに分岐を書くと、増えるたびに書き足す

1024 未満なら B、1048576 未満なら KB、と条件を並べていく書き方もできます。動きはしますが、単位が 5 つあれば分岐も 5 本になり、境目の数字を手で書くので 1 桁の打ち間違いに気づけません。単位を 1 つ足したくなるたびに、分岐も 1 本足すことになります。

何回割れるかを数える

考え方を変えます。割れるあいだ割り続けて、割った回数を数えます。0 回なら一番下の単位、1 回なら 1 つ上、2 回ならその上です。時間の単位で試すと動きが見えます。

Python

def stepsToShrink(seconds): steps = 0 while seconds >= 60: seconds /= 60 steps += 1 return steps print(stepsToShrink(90)) # 1 print(stepsToShrink(7200)) # 2

割り終わったあとの値も一緒に持っておけば、表示に使う数字がそのまま手に入ります。そして数えた回数は、添字としても使えます。単位を並び順のまま配列に入れておけば、分岐を 1 本も書かずに単位が選べます。

Python

UNITS = ["秒", "分", "時間"] print(UNITS[stepsToShrink(7200)]) # 時間

容量なら、割る数が 60 ではなく 1024 になり、配列の中身が 5 語に増えるだけです。単位を足したくなったら配列に 1 語足せば済みます。

一番上の単位で止める

割れるあいだ割り続けると、一番上の単位を超える大きさが来たときに配列の外へ出ます。Python なら添字が範囲外で落ち、JavaScript なら undefined が単位として表示されます。繰り返しの条件に「添字がまだ最後の単位に届いていない」を足して、上限で止めます。条件が 2 つ並ぶので、片方だけ書いて満足しないように気をつけます。

小数第 1 位に固定する

1.0 KB と 1 KB は、文字列としては別物です。テストは文字列そのものを比べるので、桁をそろえておく必要があります。Python は書式指定、JavaScript は toFixed で 1 桁に固定できます。

Python

print(f"{2.0:.1f}") # 2.0

JavaScript

console.log((1.5).toFixed(1)); // "1.5"

戻り値が文字列なので、間違えたときに何がどうずれたのかが目で見えます。単位が 1 つずれているのか、桁が足りないのか、区切りの空白が抜けているのか、テストの出力を読むだけで切り分けられます。

解説

Java の String.format("%.1f", v) は環境によって小数点が , になります。Locale.US を明示すると揺れません。

要件

  1. formatSize という名前の関数を実装すること
  2. B / KB / MB / GB / TB の 5 単位を扱うこと
  3. 小数第 1 位までの文字列を返すこと

入出力例

formatSize(0) → "0.0 B" formatSize(500) → "500.0 B" formatSize(1024) → "1.0 KB" formatSize(1500) → "1.5 KB" formatSize(1048576) → "1.0 MB" formatSize(1073741824) → "1.0 GB"

ヒント

単位は配列で持って index を進めると書きやすい

while ループで size >= 1024 のあいだ割り続ける

Python は f-string、JS は toFixed(1) を使うと整形が楽

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

関連レッスン

  • キャッシュヒット率

    ヒット数と総アクセス数からキャッシュヒット率をパーセントで返す

  • LRU 簡易シミュレーション

    ページアクセス列から LRU 方式のキャッシュミス回数を求める

  • エンディアンの入れ替え (uint32)

    32bit 整数のバイト順を入れ替えてビッグエンディアンとリトルエンディアンを変換する

  • バッファ範囲チェック

    オフセットと長さが固定サイズバッファに収まるかを判定する

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

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

  • 配列サイズ固定の同型データの集まり
  • JavaScriptWeb で動的な振る舞いを担う言語
  • テストバグを見つける工程
  • 戻り値呼び出し元への返答を表す点線矢印
  • 関数処理に名前を付けて再利用できる単位
main.py
学習モード
エディタを読み込んでいます

メモ

ディスクサイズフォーマット

⌘S で保存