バイト → KB 変換

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

バイト → KB 変換

このレッスンで分かること

  • この一行に、計算量 精度 単位 の三つの設計判断がすべて詰まっています
  • コンピュータは内部で 0/1 を bit の単位で扱い、8 bit をまとめたものが 1 byte です
  • 1 byte = 8 bit は世界共通のお約束です

バイト → KB 変換 とは

1024 で割って KB に変換し、容量表示の基本を体得する。本レッスンでは、バイト → KB 変換 の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

コンピュータは内部で 0/1 を bit の単位で扱い、8 bit をまとめたものが 1 byte です。日々の開発で KB MB GB といった単位を見ない日はありません。Slack の添付ファイル、Docker のイメージサイズ、CI のキャッシュ容量、SQLBLOB カラムの上限、すべてが byte をベースに数えられています。今回はその一番下にある変換ルールを、function で表現してみます。

単位を 数字 + 約束ごと として理解できると、ファイル容量・通信量・メモリの計算が一気に楽になります。

bit と byte の関係

1 byte = 8 bit は世界共通のお約束です。bitbinary digit の略で、コンピュータが扱う最小情報単位、01 のいずれかを取ります。8 bit まとめれば 2^8 = 256 通りを表現でき、ASCII の英数字一文字をちょうど 1 byte で表せるのが偶然ではない設計です。容量や転送速度を語るときは、bitbyte のどちらで数えているかを最初に確認するクセをつけましょう。Mbpsmega bit per secondMB/smega byte per second で、数値が 8 倍 ずれます。

IEC と SI の二つの世界

KB と一口に言っても、世の中には二つの流儀があります。1 KB = 1024 byte と数える流儀 (KiB とも書く) と、1 KB = 1000 byte と数える流儀 (SI 単位) です。OS のファイル容量表示はだいたい 1024 ベース、ネットワーク回線速度や HDD の販促表記は 1000 ベース が中心です。Windows のエクスプローラ、macOSFinderLinuxls -lh などはバージョンや設定で挙動が変わるため、両方の世界を知っていると説明できる人になれます。

本レッスンでは 1 KB = 1024 byte を採用します。これは OS の見方 であり、メモリファイルシステム を扱うときの直感に最も近い値だからです。IEC の正式表記では KiB MiB GiB ですが、現場の口頭表現はまだまだ KB MB GB のまま 1024 倍 を意味することが多いのが実情です。

計算の本質は割り算

バイトから KB への変換は、byte / 1024 という単純な割り算です。整数で返してしまうと 1023 byte0 KB になり、 が見えなくなります。ここでは 小数を含む値 を返すように設計し、UI 側で toFixed(2) のような丸めをかけるという発想で書きます。

関数 の中で丸めを決め打ちすると、後から精度を変えたくなったときに困ります。変換表示 は分けるのが原則です。

Python

def byteToKb(bytes_): return bytes_ / 1024

JavaScript

function byteToKb(bytes) { return bytes / 1024; }

この一行に、計算量 精度 単位 の三つの設計判断がすべて詰まっています。

0 と負の値の扱い

0 byte のときは 0 を返します。これは 0 / 1024 = 0 で自然に処理されます。マイナスの値が渡ってきた場合は、本問題では呼び出し側を信用して そのまま割る 仕様にします。実務では if (bytes < 0) throw のように バリデーション を入れるのが王道ですが、テストの単純化のためここでは省略します。

大きな値での丸め誤差

JavaScript の Number も Python の float も、内部は IEEE 75464bit 浮動小数点です。2^53 - 1 (約 9000 兆、すなわち 9,007,199,254,740,991) を超えるバイト数を扱うと 丸め誤差 が顔を出します。GB や TB 単位での精度が必要なら BigIntDecimal を検討しましょう。データ基盤の文脈では、PB (ペタバイト) を扱うことも珍しくなく、その世界では 精度 がそのまま 課金額のずれ に直結します。

diagram (will load when visible)

関数を独立させる利点

byteToKb のような変換関数を独立させると、単体テスト が書きやすく、ロジックの変更点がはっきりします。KiB から KB (1000 ベース) に切り替えたい日が来ても、影響範囲はこの関数一箇所で済みます。関心の分離 という設計原則の最小単位の練習だと思って書いてみましょう。

単位変換ヘルパは、ユーティリティ ライブラリ の最初の住人になることが多い関数です。

よくある間違い

  • 1024 ではなく 1000 で割ってしまい、OS の表示と数値がずれる
  • 整数除算 // を使って 1023 byte → 0 KB になる
  • 丸めを 関数 内でやってしまい、後で精度を変えづらくなる

単位変換表示整形 は別レイヤー。分けて書くと再利用しやすい関数になります。

やってみよう

  • 1 MB = 1024 KB = 1024 * 1024 byte の変換関数も書いてみる
  • 入力が小数 1234.5 の場合の戻り値を確認する
  • マイナスの値が来たら例外を投げる版を追加で書いてみる
  • 1000 ベースbyteToKbSI を書いて両者の差を眺める

よくある質問

Q. このトピックを覚える意味は何ですか?

A. アプリ層の上っ面だけ追わず、内部で何が起きているかを理解するための土台になります。例えばエンコーディングや進数変換は、文字化け・整数オーバーフロー・データサイズ計算で必ず出会う知識です。実務での問題解決スピードが格段に上がります。

Q. 実務でこの知識を使う場面は?

A. API の Content-Length 計算、ファイルアップロードのサイズ制限、画像処理での色深度計算など、低レベルな数値を扱う場面で頻出します。OS・ネットワーク・暗号の理解にも繋がるため、CS の共通言語と思って習得しておくと一生使える知識です。

Q. 他の章とどう繋がりますか?

A. 後続の章で扱うデータ構造(スタック・キュー)、アルゴリズム(探索・ソート)の基礎になります。「データを 32 bit でどう表現するか」「メモリにどう載せるか」が分かると、後続トピックの実装が腹落ちしやすくなります。

次のレッスン

次は ディスクサイズフォーマット に進みましょう。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. バイト→KB の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. バイト→KB とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

要件

  1. byteToKb という名前の関数を実装すること
  2. 1 KB = 1024 byte として計算すること
  3. 0 や 512 など小さい値でも正しい値を返すこと

入出力例

test-cases.txt

byteToKb(1024)1 byteToKb(2048)2 byteToKb(0)0 byteToKb(512)0.5 byteToKb(1048576)1024

ヒント

main.py
main.py
学習モード

メモ

バイト → KB 変換

⌘S で保存