キビバイト、キロビット、キロバイトの違いは何ですか?


45

この質問は、サイズを測定するこれら3つの方法(キビバイトキロビット、従来のキロバイト)の違いについて疑問に思いました。

これらの測定には用途が異なることを理解しています(データ転送速度はビット/秒で測定されます)が、MbとMB、MiBの違いを判別できるかどうかはわかりません。

以下は、この回答から得られたコメントです(強調鉱山)。

C64には65536 バイトのRAMがあります。慣例により、メモリーサイズはkibiBytesで指定され、データ転送速度は キロビットで指定され、大容量記憶装置は何でも製造者が考えるBytesで指定されます。ハードドライブはラベルにT、G、M、およびkを使用し、WindowsはTiGiMi、およびkiでサイズを報告します。そして、それらの1.44MBのフロッピー?これらは1.44MBや1.44MiBではなく、1.44キロビバイトです。それは1440kiBまたは1'474'560バイトです。– 3番目


12
今後数年間混乱が生じるでしょう。コンピューティングの初期の頃、人々は、コンピューターの場合は1000よりも1024倍のファクターで作業する方が明らかにずっと簡単だと気づきました。したがって、何十年もの間、非標準の1024には標準のSIプレフィックス「kilo」が使用され(現在でも非常に頻繁に使用されています)、コンピューティングの事実上の標準になりました。とにかくSI 1000を使用している人がいることを除いて。混乱を整理するために、「kibi」は現在1024ファクターとして公式に定義されていますが、簡単に移行するには遅すぎました。「kilo」は、しばらくの間、1024個の要因に対して定期的に使用/乱用されます。
Steve314

彼らが愚かな音を立てるプレフィックスを選択していなかったなら、それは採用を助けたでしょう。頭字語であっても、誰かがその単語を「精神的に吸引」する必要があります。私は単に「キビバイト」などを決して使用しません
tgm1024

回答:


63
1 KiB (Kibibyte) = 1,024 B (Bytes) (2^10 Bytes)
1 kb  (Kilobit)  =   125 B (Bytes) (10^3 Bits ÷ (8 bits / byte) = 125 B)
1 kB  (Kilobyte) = 1,000 B (Bytes) (10^3 Bytes)

SIプレフィックスの場合も同じです。k(1x10 3)、M(1x10 6)、G(1x10 9)、したがって、拡張により:

1 MiB (Mebibyte) = 1,048,576 B (Bytes) (2^20 Bytes)
1 Mb  (Megabit)  =   125,000 B (Bytes) (10^6 Bits ÷ (8 bits / byte) = 125,000 B)
1 MB  (Megabyte) = 1,000,000 B (Bytes) (10^6 Bytes)

彼らはベース2であるため、ビット異なっているだけではなく、ベース10(例えば、すべての数字が2に等しく、IECバイナリプレフィックス(吉備/ mebi / gibiなど)している何かの代わりに、10 何かを)。私はそれがはるかに簡単だと思うので、SIプレフィックスを使用することを好みます。さらに、カナダ(私の国)はメートル法を使用しているため、たとえば1kg = 1000g(または1k anything = 1000 base things)に慣れています。これらはどれも間違っていたり正しいわけではありません。使用しているものとそれが実際に同等のものを知っていることを確認してください。

コメンターをなだめるには:

1 Byte (B) = 2 nibbles = 8 bits (b)

これが、16進エディタで見たことがある場合、すべてが2つの16進文字に分割される理由です。各16進文字はニブルのサイズであり、1バイトに2つあります。例えば:

198 (decimal) = C6 (hex) = 11000110 (bits)

5
+1バイトに8ビットがあることを述べると便利です。
パラドロイド

4
...そして、ニブルが4ビット(または半バイト)であることを忘れないでください!
リンカー3000

4
また、小文字の「b」が「バイト」を短縮するために誤って使用される場合があることに注意してください。多くの場所で、MBをメガバイト、Mbitをメガビットと略して「b」を使用し、「b」から完全に離れたところに「ビット」を使用しています。
ジェームズ

4
接頭辞キロは、Kではなくkに短縮されます。
garyjohn

1
@Redandwhiteいや、彼らは彼らのストレージを測定するためにベース10を使用しますが、私たちのコンピューターはベース2を使用します。これは、ボックスに印刷されるものとコンピューターに表示されるものの間の矛盾を説明します。たとえば、500GB (box) = 465.7GiB (computer)(そして、それが彼らがあなたを得る方法です)。
リス

9

簡単で理解しやすい基本的な用語がいくつかあります。

* A bit      (b)   is the smallest unit of data comprised of just {0,1}
* 1 nibble   (-)   = 4 bits (cutesy term with limited usage; mostly bitfields)
* 1 byte     (B)   = 8 bits (you could also say 2 nibbles, but that’s rare)

ビットとバイト(プレフィックスを含む)を変換するには、単に8で乗算または8で割ります。素敵でシンプル。

大規模なデータグループを測定する2つのシステム、decimalbinaryがあるため、状況はもう少し複雑になります。何年もの間、コンピュータープログラマーとエンジニアは両方に同じ用語を使用していましたが、混乱は最終的に適切なプレフィックスセットを標準化するためのいくつかの試みを引き起こしました。

各システムは、ビットまたはバイトのいずれかに適用できる同様のプレフィックスセットを使用します。各プレフィックスは両方のシステムで同じように始まりますが、バイナリプレフィックスはその後、ベビートークのように聞こえます。

10進法は10を基数としています。10本の指があるため、ほとんどの人が慣れて快適に使用できます。バイナリシステムはbase-2であり、ほとんどのコンピューターは2つの電圧状態を持っているため、ほとんどのコンピューターが使い慣れています。

10進法は、ほとんどの人にとって明らかで使いやすい(頭の中で乗算するのに十分単純です)。各プレフィックスは1,000ずつ上がります(その理由はまったく別の問題です)。

バイナリシステムは、ほとんどのコンピューター以外の人が使用するのがはるかに難しく、プログラマーでさえ、頭の中で複数の任意の大きな数字を使用できないことがよくあります。それでも、それは2の倍数であるという単純な問題です。各プレフィックスは1,024ずつ上がります。1つの「K」は1,024です。これは、10進数の「k」1,000に最も近い2のべき乗であるためです(これはこの時点では当てはまりますが、連続するプレフィックスごとに差が急速に大きくなります)。

同じプレフィックスを持つビットとバイトの番号は同じです。

* Decimal:
* 1 kilobyte (kB)  = 1,000 B  = 1,000^1 B           1,000 B
* 1 megabyte (MB)  = 1,000 KB = 1,000^2 B =     1,000,000 B
* 1 gigabyte (GB)  = 1,000 MB = 1,000^3 B = 1,000,000,000 B

* 1 kilobit  (kb)  = 1,000 b  = 1,000^1 b           1,000 b
* 1 megabit  (Mb)  = 1,000 Kb = 1,000^2 b =     1,000,000 b
* 1 gigabit  (Gb)  = 1,000 Mb = 1,000^3 b = 1,000,000,000 b

* …and so on, just like with normal Metric units meters, liters, etc.
* each successive prefix is the previous one multiplied by 1,000



* Binary:
* 1 kibibyte (KiB) = 1,024 B  = 1,024^1 B           1,024 B
* 1 mebibyte (MiB) = 1,024 KB = 1,024^2 B =     1,048,576 B
* 1 gibibyte (GiB) = 1,024 MB = 1,024^3 B = 1,073,741,824 B

* 1 kibibit  (Kib) = 1,024 b  = 1,024^1 b =         1,024 b
* 1 mebibit  (Mib) = 1,024 Kb = 1,024^2 b =     1,048,576 b
* 1 gibibit  (Gib) = 1,024 Mb = 1,024^3 b = 1,073,741,824 b

* …and so on, using similar prefixes as Metric, but with funny, ebi’s and ibi’s
* each successive prefix is the previous one multiplied by 1,024

10進数と2進数のシステムの差は小さいものから始まり(1Kで24バイト、つまり2.4%間隔)、各レベルで大きくなります(1Gでは70MiB、または6.9%離れています)。

一般的な経験則として、ハードウェアデバイスは10進単位(ビットまたはバイト)を使用し、ソフトウェアはバイナリ(通常はバイト)を使用します。

これは、一部のメーカー、特にmfgsをドライブする場合、ドライブサイズを大きくするために10進単位を使用することを好む理由ですが、ユーザーはWindowsなどを見ると予想よりも少ないと感じるとイライラします。al。サイズをバイナリで報告します。たとえば、500GB = 476GiBであるため、ドライブに500GBが含まれるようにラベル付けされている間、マイコンピュータはバイナリ476GiB(ただし「476GB」)を表示するため、ユーザーは他の23GBがどこにあるのか疑問に思います。(ドライブの製造元はしばしばパッケージに脚注を付けて「フォーマットされたサイズが小さい」と述べていますが、これはファイルシステムのオーバーヘッドが10進単位と2進単位の違いに比べて何もないため誤解を招きます。)

ネットワーキングデバイスは、多くの場合、歴史的な理由からバイトではなくビットを使用します。ISPは、提供する接続の速度を大きくするため、ビットを使用してアドバタイズすることがよくあります。1.5MiBpsではなく12Mibpsです。多くの場合、ビットとバイト、10進数と2進数を組み合わせて一致させます。たとえば、ISPが「12MBps」ラインと呼んでいるものをサブスクライブし、12MiBpsを取得しているが実際には1.43MiBps(12,000,000 / 8/1024/1024)を受信して​​いると考えます。


2
@endolith、そうではありません。まず第一に、バイナリユニットを使用するドライブメーカーが実際に存在するか、少なくとも過去に存在していました。第二に、あなたはポイントを逃しました。必要に応じて、ドライブに73,400,320を置くことができます。実際には66ではなく70M(i)Bになります。70,000,000を使用します。それは単純なコーナーであり、多くのメーカーがそれをしています。食べ物を見てください。500GBの代わりに、1GBに等しい454Gを配置します。さらに悪いことに、454Gの代わりに、450Gを使用し、欠落している4Gを丸めに非難します。それは陰謀ではなく、コスト削減です。
Synetech 14

1
バイナリユニットを使用しているハードドライブメーカーの例をいくつか提供してください。
エンドリス

1
@endolith、これは歴史サイトではありません。たぶん、春の掃除をして古いドライブを掘るとき、写真か何かを投稿するでしょう。それ以外の場合は、コンピューターの歴史博物館や人気のコンピューターショップにアクセスして、古いハードドライブを見つけることができます。最近では、ほとんどのmfgsは、音を大きくするラベルを意図的に使用しています。先ほど言ったように、必要に応じて73,400,320バイトにして70MBのドライブを作成することもできますが、なぜ安いのに技術的に70MBと呼ぶのでしょうか?繰り返しますが、それは陰謀ではなく、一般的なマーケティングの欺ceptです。
Synetech 14

2
私は既にビットセーバーアーカイブを調べましたが、見つかった例はすべて10進数です。ドライブメーカーが顧客を欺くために、ある時点でバイナリから10進数に切り替えたというこの神話は非常に簡単です。それらはマーケティング部門ではなく、エンジニアが使用する標準ユニットを使用するエンジニアによって作成されました。70,000,000バイトのIBM 3340ドライブを「70 MB」と呼ぶのは論理的で正気です。それが '' mega- ''が常に意味することであり、それはユーザーが期待することです。Microsoft Windowsのように、一部の場所で「66 MB」、他の場所で「68,359 KB」と呼ぶのは非常識です。
エンドリス14

1
@endolithは、混乱を知っており、ドライブを70,000,000だけではなく 73,400,320バイトにすることができたとしても、意図的にそのように販売するというだけで、10進数に切り替えたとは誰も言いませんでした。「常に」という意味のあなたの声明に関しては、バイナリユニットが使用される時期についてはすでにスレッドがあります。それはかなり前のことで、確かにコンピューターが消費者製品になる前のことです。
Synetech 14

-4

いくつかの答えは正確ではありません。

最初にメモを作成しましょう。

プレフィックス「kilo」は1 000を意味します。「kilo」の前に付いているものは、そのアイテムの1 000を意味します。同じことは、「メガ」または「ミリオン」、「ギガ」または「10億」、「テラ」または「兆」などにも当てはまります。

単純に1 000である代わりに1 024が存在する理由は、2進算術の動作方法のためです。バイナリは、その名前が示すように、基数2のシステムです(2桁:0、1)。毎日使用する10桁の基数10システム(0、1、2 ... 9)とは対照的に、2桁でのみ算術演算を実行できます。

2進算術を使用して1 000(キロ)に達するには、浮動小数点計算を実行する必要があります。つまり、1 000に到達するまで、各操作で2進数を実行する必要があります。ベース10システムでは、1000 = 10 3(10を常にベース10で累乗します)、コンピューターが「残り」なしで実行する非常に簡単かつ迅速な計算ですが、ベース2システムでは、 2を2のべき乗(常に2の累乗)して正の整数にすることはできません。1000を取得します。浮動小数点演算または長い加算を使用する必要があり、整数計算2 10よりも実行に時間がかかります。= 1024。

2 10 = 1 024は1 000に近く、1 024から1の有効数字は1 000(非常に良い近似)であり、CPUの速度が老犬のように遅く、メモリが非常に限られていたときに戻ることに気づいたかもしれません、これはかなりまともな近似値であり、作業が非常に簡単であり、実行が速いことは言うまでもありません。

このため、「kilo」、「mega」、「giga」などの用語は、接頭辞が正確でない数字(1 024、2 048、4 096など)で詰まっています。それらは決して正確な数値を意味するものではなく、10を底とする数値のバイナリ近似でした。彼らは単に「技術」の人々が使用する専門用語として生まれました。

問題をさらに複雑にするために、JEDECは半導体メモリ回路で使用されるユニットのための独自の標準を作成しました。JEDECユニットの一部をSI(標準国際)ユニットと比較してみましょう。

Kb =キロビット(JEDEC、1024ビット。大文字の「K」と小文字の「b」に
注意)kB =キロビット(SI、1000ビット。小文字の「k」と大文字の「B」に注意)

b =ビット(JEDEC、小文字の「b」に注意)
b = ??? (SIは単語「ビット」を定義しないため、その使用は任意です)

B =バイト(JEDEC、8ビット。大文字の「B」に注意)
B = ???? (SIは単語「バイト」を定義せず、「B」は「Bel」に使用されます(DeciBelと同様))

KB =キロバイト(JEDEC、1024バイト。大文字の「K」と「B」に注意)
kb =キロバイト(SI、1000バイト。小文字の「k」と小文字の「B」の使用に注意)

ポイントは、場所によって定義が異なるプレフィックスが異なることです。どちらを使用すべきかについての厳格な規則はありませんが、使用する規則と一致している必要があります。

ダウン投票のため、バイナリを1 000にすることができない理由を明確にするために、正の整数に上げます。

バイナリーシステム:

+----------------------------------------------------------------------------------+
| 1 024ths | 512ths | 256ths | 128ths | 64ths | 32nds | 16ths | 8ths | 4s | 2s | 0 |
+-----------------------------------------------------------------------------------

バイナリシステムでは、列が毎回2倍になることに注意してください。これは、毎回10ずつ増加するベース10システムとは対照的です。

+--------------------------------------------------------------------------+
| 1 000 000ths | 100 000ths | 10 000ths | 1 000ths | 100ths | 10s | 1s | 0 |
+--------------------------------------------------------------------------+

バイナリの最初の10のべき乗(基数2)は次のとおりです。

2 0 = 1
2 1 = 2
2 2 = 4
2 3 = 8
2 4 = 16
2 5 = 32
2 6 = 64
2 7 = 128
2 8 = 256
2 9 = 512
2 10 = 1 024

ご覧のとおり、バイナリ2を正の整数に上げて1 000にすることはできません。


3
数値1000に浮動小数点演算が必要であると述べるとき、あなたは間違っていると思います。任意の種類の番号付けシステムを使用して、任意の自然数を表すことができます。実際、1000に相当するバイナリは1111101000です。
ドクトロライチャード

Doktoro、私たちはバイナリシステム、またはベース2で作業していることを覚えておいてください。実際、あなたは間違っています。2進数の2の最初の10のべき乗(基数2)は次のとおりです。2 ^ 0 =1。2^ 1 = 2. 2 ^ 3 = 4. 2 ^ 4 = 8. 2 ^ 5 = 16. 2 ^ 6 = 64 。2 ^ 7 =128。2 ^ 8 =256。2 ^ 9 =512。2 ^ 10 = 1024.答えは指数関数であり、指数を1増やすたびに倍になることに注意してください。バイナリ2(10進数2ではなくBINARY 2)を任意の正の整数に上げて1 000にすることができます。
user3005790

これは、ビットとバイトの違いを説明していません。実際には、「ハードファーストルール」があります。1KBは1000ビット、1KBは1000バイトです。大きな違いがあります。8 Kbは1 KBです。
ラムハウンド

3
このステートメントは正しいものですが、浮動小数点演算を実行する必要はありません。あなたも理解してようにするには、2のべき乗を理解する1111101000 = 2 ^ 9 + 2 ^ 8 + 2 ^ 7 + 2 ^ 6 + 2 ^ 5 + 2 ^ 3 = 1000
Doktoro Reichard

1
「それらは決して正確な数であることを意図したものではなく、基数10のバイナリ近似である」とは信じていません。1と0の格納、およびバイナリレジスタを使用したハードウェアアドレッシングに制限されていた(制限された)ハードウェアの結果だと思います。両方ともベース2です。基数10の計算の近似とはまったく関係ないように感じます。また、計算についてあなたが主張しているポイントを見ることもできません。コンピューター出力が実際に1000を表示するつもりであった場所に1024を表示したり、内部で1024になったときに1000を表示したりするようなものではありません。
アルジャン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.