ツイート
シェア
LINEで送る
B! はてぶでブックマーク
Pocketでブックマーク
RSSフィード

1024byte = 1kB は不正解って知ってますか? プログラマ・SEが使う単位について

2進数の画像
by 写真素材ダウンロードサイト【写真AC】
の画像をもとに加工しています。

1024byte=1KBは○。1024byte=1kBは✕。1000byte=1kBは○。1024byte=1KiBは○。

説明できるほど分かっていたのは1024byte=1KBと1024byte=1KiB の2つだけ。

1000byte=1kBは『その計算もある』程度の理解。

エンジニア目線では理解不能な単位の話。

1000byte = 1kB なんて考えたこと無い

プログラムを書く人で、情報(データ)のサイズ単位を10進数の倍量で考えている人いるんだろうか?

単位が大きくなるほど乖離が大きくなるのに。

10進の
倍量
2進数の
倍量
差分
1kB1,000byte
(103)
1,024byte
(210)
24byte
1MB1,000,000byte
(106)
1,048,576byte
(220)
≒ 47.4KB
1GB1,000,000,000byte
(109)
1,073,741,824byte
(230)
≒ 70MB
1TB1,000,000,000,000byte
(1012)
1,099,511,627,776byte
(240)
≒ 92GB

1TBにもなると90GBも差が出てしまいます。ただ、国際的な単位の取り決めでははっきりと、『1キロビットは 1000 ビットであって1024 ビットではない』と言い切っています。

(バイトでも同じこと。)

『それ知らんかった』という人はどれくらいいるんだろう? 知らなかったことはエンジニアとして恥ずかしいことなんだろうか?

kBとKBのちがい

『kB』『KB』と書いているのに気づいたでしょうか? 間違えたんじゃありません。わざとです。

一般的に情報のデータサイズでは『キロ』を大文字で表記します。

『国際的な単位の規格(小文字k)とはちがう、Kは2進数の倍量ですよ?』

『単位の規格を守ってないわけじゃないよ。』

と言いたいらしい。

しかし、メガ、ギガ、テラは同じ大文字で区別できません(適当な言い訳?)。でも『KB』の表記はWindowsなどでは当たり前のように使われています。

『国際的な単位』と何度も言ってるのが気になりますね?

これは国際単位系(International System of Units: 略してSI)で、メートル法(長さ:m, 質量: g)から発展させた国際的な共通の単位規格。

SIという組織はない。国際会議で採択された単位の基準の名称。エンジニアになじみのあるISOやJISでも採用されている。

国際単位系(SI)では大文字のKは入っていません。

乗数単位
キロ103k
メガ106M
ギガ109G
テラ1012T
SIで規定される単位の倍量(SI接頭語という)より抜粋

1024byte = 1KB は○で 1024byte = 1kB は✕、1000byte = 1kB は○という話は、SIを厳密に守ればの話なんですが、そもそもSIは情報量の単位を現実に合わせて考えたことがあるんだろうか?

(採択されたのは1960年。2019年に第9版改定。)

国立研究開発法人産業技術総合研究所(産総研)- 計量標準総合センター

SI文書第9版(2019)日本語版及び関連資料

国際単位系(SI)第9版(2019)日本語版(PDFページ 29, 文書ページ112)

KBとKiBのちがい

キロバイトを意味する単位でKiBというのを見たことがあるでしょうか? これは正確には『キビバイト』といい、SIが頑なに認めない210倍の単位変化に用意されたものです。

1KBだと1000byte, 1024byteの2つの意味がありますが、1KiBは厳密に1024byteのこと。

名称
(SI)
単位
(SI)
乗数
(SI)
名称
(情報量)
単位
(情報量)
乗数
(情報量)
キロk103キビKi210
メガM106メビMi220
ギガG109ギビGi230
テラT1012テビTi240
ペタP1015ペビPi250
エクサE1018エクスビEi260
ゼタZ1021ゼビZi270
ヨタY1024ヨビYi280

国際電気標準会議(IEC)が策定し2進接頭語といいます。

(接頭語は接頭辞とも言う。g(グラム)など基本単位に付けるプレフィックス(prefix)のこと。)

IECは国際標準化機構(ISO)と共同で開発することも多く、国際的なデファクトスタンダードになっている組織の1つです。

ISO/IECとJIS(規格の標準化)

ISO(International Organization for Standardization)

国際標準化機構。

製品やサービスの規格を国際的に統一するために制定する非営利組織。

ネジの規格から情報セキュリティまで幅広い範囲を網羅する。

単位を統一したりもする。

IEC(International Electrotechnical Commission)

国際電気標準会議。電気・電子技術分野の標準化を策定する非営利組織。

ISOと共同開発することも多い。

JIS(Japanese Industrial Standards)

日本産業規格。

日本国内での統一規格を策定する組織。外国との整合性を取るために、ISO/IEC勧告に準拠する。

かつては日本工業規格と言われた。ともに(ジス)という。法改正で名称も変わった。(令和元年7月1日施行。)

そもそもなぜ1024倍という中途半端な数字に?

情報系の学校やIT業界に入ったりして最初に疑問に思うことは、なぜ1024という半端な数字で単位を変えるのかということ。

(もしかすると今は、中学・高校普通科で教えるかもしれないが。)

これは、人間の数に対する考え方のスタンダード(10進数)と、コンピュータの数のスタンダード(2進数)がちがうから。

2進数では、1000という数字のほうが中途半端です。

10進数1000
2進数1111101000

10進数の倍量に一番近い値で2進数で切りが良い値が1024。

10進数1024
2進数10000000000

キロ(k), メガ(M), ギガ(G), テラ(T)、... は1000倍(103)、3桁で変わり、Ki, Mi, Gi, Ti, ... は1024倍(210)、10桁で変わります。

もし2進数を3桁で区切ると、8倍(23)で変わるので勘違いするととんでもないことになります。というか『そんな小刻みに単位が変わってどうすんだ?』になる。

非SI単位系にすら入れてもらえない情報の単位

SI単位系に属さない一般的に使われる単位は他にもあります。

メジャーな非SI単位系

時間の日時分。

(1d = 24h, 1h = 60min, 1min = 60s)

面積のヘクタール(ha)。

体積のリットル(L)。

質量のトン(t)。

デシベル(dB)。

SIの文書では『SI単位と併用できる非SI単位』と言っているので、半ば認めているようなもの。

それに対して、Ki, Mi, Gi, ... はその項目にすら入っていないし、さっきも言ったように『1k = 1000であって1k = 1024ではない』とわざわざ書いてある始末。そして注記・補足説明扱い。

国立研究開発法人産業技術総合研究所(産総研)- 計量標準総合センター

SI文書第9版(2019)日本語版及び関連資料

国際単位系(SI)第9版(2019)日本語版(PDFページ 29, 文書ページ112)

情報の単位の1024倍はSI単位系に近づけようと設定したのにこれが気に入らないらしい。『紛らわしいことすな!』なんでしょうか?

個人的にはすでに一般的なのに、まだ拒否しますか?って思う。

エンジニアは 1k = 1024。消費者には 1k = 1000。

SI接頭語を知らなくてもしょうがないです。ボクは情報量を当たり前のように2進接頭語で見る人達の中で仕事してきました。

細かい数字にこだわる人たちなのに、『単位はSIか? 2進か?』という確認をする姿を見たこともありません。それがIT技術者の慣習だから。

ただ、情報通信の分野ではSI接頭語で見るのが常識らしい。(動画などのビットレードなど。)

改めて見直したところ、ChromeのDevToolsの単位はkBでした。これはどっちなんだろう。小文字だから1000byteなんだろうか?

HDD(SSD)の実際の容量が少ない!

Windowsでは、パソコンに入っているHDD(SDD)や外付けの容量を見ると、製品パッケージに書いてある容量より小さくなります。

『2TB』のものを買っても実際にPCにつないで見てみると『1.81TB』になる。1024byte = 1KBで計算しているため。

ややこしいのは、Linux, UnixベースのOS(macOSなど)は1000byte = 1kBで表示すると聞いたことがあります。

(Linuxはコマンドで使うことがほとんどでデスクトップを使った経験があまりない。)

Windowsは正直者と言えばそうなんですが、消費者には大きく見せることになるので『景品表示法違反じゃないか?』と思いつつ、単位の基準のSIだからと言われれば文句も言えません。

スナック菓子の容量を少なくして料金据え置きよりも消費者のためになってないと思う。

Linuxはコマンドで見ると1024byte = 1KBで表現する。

topコマンドではKiBと表示されるのにdfコマンドではKBが表示されるのがややこしい。でも値は同じ。

エンジニアの慣習に合わせてるのでしょう。

前の投稿
2進数と16進数、10進数を理解するには、小学1年生に戻ると分かりやすい。
素朴な疑問。2進数で"-1"はなぜ1が並ぶのか?意外とつまづくマイナス表現。
次の投稿

コメント

  1. saito より:

    こんにちは。コンピュータでの1024問題が気になって調べていました。情報ありがとうございます。
    SI単位では、長さm、質量kg、時間s(秒)を使います。質量は基本単位としてkgになっているところが要注意です。
    古い言い方だと、MKS系(m, kg, s)、CGS系(cm, g, s) として、組み立て単位が構成されていました。

*