В чем разница между кибибайтом, килобитом и килобайтом?

45

Этот вопрос заставил меня задуматься о различиях между этими тремя способами измерения размера: кибибайт , килобит и обычный килобайт .

Я понимаю, что эти измерения используются по-разному (скорость передачи данных измеряется в битах / с), но я не совсем уверен, смогу ли я определить разницу между Мб, Мб и МиБ.

Вот комментарий, воспроизведенный ниже, взятый из этого ответа ( выделено мной ).

C64 имеет 65536 байт оперативной памяти. По соглашению, объем памяти указан в kibiBytes , скорость передачи данных в килобитах и запоминающие устройства в любом-то-производителях, думают, из-сейчас- Bytes . Жесткие диски используют T, G, M и k на этикетке, Windows сообщает размер в Ti , Gi , Mi и ki . И эти 1.44MB дискеты? Это не 1,44 МБ и не 1,44 МБ, а 1,44 Килокибайта. Это 1440 кБ или 1 474 560 байт. - третий

Красный и белый
источник
12
Там будет путаница на долгие годы. На заре вычислительной техники люди заметили, что для компьютеров было намного проще работать с коэффициентами 1024, а не 1000. Поэтому на протяжении десятилетий стандартный префикс SI «килограмм» использовался (и все еще очень часто используется) для нестандартного 1024, и он стал де-факто стандартом в вычислительной технике. За исключением того, что некоторые люди все еще использовали SI 1000 в любом случае. Чтобы разобраться в беспорядке, «киби» теперь официально определяется как фактор 1024 - но это слишком поздно для легкого перехода. "Кило" будет регулярно использоваться / злоупотреблять 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)

Единственными, которые немного отличаются, являются двоичные префиксы МЭК (kibi / mebi / gibi и т. Д.), Потому что они находятся в базе 2, а не в базе 10 (например, все числа равны 2 что-то вместо 10 что-то ). Я предпочитаю просто использовать префиксы SI, потому что я считаю, что это намного проще. Кроме того, Канада (моя страна) использует метрическую систему, к чему я привык, например 1kg = 1000g(или 1k anything = 1000 base things). Ничто из этого не является неправильным или правильным; просто убедитесь, что вы знаете, какой из них вы используете, и что это на самом деле означает.

Чтобы успокоить комментаторов:

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

Вот почему, если вы когда-либо заглядывали в шестнадцатеричный редактор, все делится на два шестнадцатеричных символа; каждый шестнадцатеричный символ размером с полубайта, и есть два байта. Например:

198 (decimal) = C6 (hex) = 11000110 (bits)
squircle
источник
5
+1 Упоминание о том, что в байте 8 битов, может быть полезным.
paradroid
4
... и не забывайте, что nybble - это четыре бита (или полбайта)!
Linker3000
4
Также следует помнить, что строчная буква «b» иногда неправильно используется для сокращения «байтов». Я вижу, что многие места просто используют «бит» в аббревиатуре, например, «МБ для мегабайта» и «Мбит» для мегабита, и вообще избегают «b».
Джеймс
4
Префикс килограмм сокращается до k, а не K.
garyjohn
1
@Randandwhite Нет, они используют базу 10 для измерения своего хранилища, но наши компьютеры используют базу 2. Это объясняет расхождение между тем, что напечатано на коробке, и тем, что отображается на компьютере. Например, 500GB (box) = 465.7GiB (computer)что , как они вас).
Squircle
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)

Для преобразования между битами и байтами (с любым префиксом) просто умножьте или разделите на восемь; красиво и просто.

Теперь все становится немного сложнее, потому что есть две системы измерения больших групп данных: десятичная и двоичная . В течение многих лет программисты и инженеры просто использовали одни и те же термины для обоих, но путаница в конечном итоге вызвала некоторые попытки стандартизировать надлежащий набор префиксов.

Каждая система использует одинаковый набор префиксов, которые могут применяться к битам или байтам. Каждый префикс начинается одинаково в обеих системах, но после этого бинарные звучат как детские разговоры.

Десятичная система - это основание-10, к которому привыкло большинство людей и которым удобно пользоваться, потому что у нас 10 пальцев. Бинарная система - это base-2, к которой большинство компьютеров привыкли и которой удобно пользоваться, потому что у них два состояния напряжения.

Десятичная система очевидна и проста в использовании для большинства людей (она достаточно проста для умножения в наших головах). Каждый префикс увеличивается на 1000 (причина этого совсем другая).

Бинарная система гораздо сложнее для большинства некомпьютерных людей, и даже программисты часто не могут умножить произвольно большие числа в своих головах. Тем не менее, это просто быть кратным двум. Каждый префикс увеличивается на 1024. Один «K» равен 1024, потому что это ближайшая степень от двух к десятичному «k», равному 1000 (это может быть верно в данный момент, но разница быстро увеличивается с каждым последующим префиксом).

Числа одинаковы для битов и байтов с одинаковым префиксом.

* 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

Обратите внимание, что разница между десятичной и двоичной системами начинается с малого (при 1 КБ они составляют всего 24 байта или на 2,4% друг от друга), но растут с каждым уровнем (при 1 ГБ они составляют> 70 ​​МБ или с интервалом 6,9%).

Как правило, аппаратные устройства используют десятичные единицы (биты или байты), в то время как программное обеспечение использует двоичные (обычно байты).

Это причина того, что некоторые производители, в частности, устройства mfgs для накопителей, предпочитают использовать десятичные единицы, потому что это приводит к тому, что размер диска звучит больше, но пользователи разочаровываются, когда обнаруживают, что его размер меньше ожидаемого, когда они видят Windows et. и др. сообщить размер в двоичном Например, 500 ГБ = 476 ГБ, поэтому, хотя накопитель рассчитан на 500 ГБ и помечен как таковой, « Мой компьютер» отображает двоичный файл 476 ГБ (но как «476 ГБ»), поэтому пользователи задаются вопросом, куда ушли остальные 23 ГБ. (Производители дисков часто добавляют сноску к пакетам, утверждая, что «форматированный размер меньше», что вводит в заблуждение, поскольку накладные расходы на файловую систему ничто по сравнению с разницей между десятичными и двоичными единицами.)

Сетевые устройства часто используют биты вместо байтов по историческим причинам, и интернет-провайдерам часто нравится рекламировать с использованием битов, потому что это делает скорость соединений, которые они предлагают, более высокой: 12 Мбит / с вместо 1,5 МБ / с. Они часто даже смешивают и сопоставляют биты и байты, а также десятичные и двоичные числа. Например, вы можете подписаться на то, что провайдер называет линией «12 МБ / с», думая, что вы получаете 12 МБ / с, но на самом деле просто получаете 1,43 МБ / с (12 000 000/8/1024/1024).

Synetech
источник
2
@ Эндолит, не правда. Прежде всего, действительно есть или, по крайней мере, были в прошлом, некоторые производители приводов, которые используют двоичные устройства. Во-вторых, вы упустили момент. Если бы они захотели, они могли бы поставить 73 400 320 на диск, который на самом деле составлял бы 70M (i) B вместо 66. Они используют 70 000 000, потому что дешевле использовать это и все еще называть его «70 МБ». Это простые режущие углы, и многие производители делают это. Посмотрите на еду; вместо 500G они поставят 454G, потому что это равно 1 фунту. Хуже того, вместо 454G они поставят 450G и обвинят недостающий 4G в округлении. Это не заговор, это сокращение расходов.
Synetech
1
Пожалуйста, приведите несколько примеров производителей жестких дисков, использующих двоичные модули.
эндолит
1
@endolith, это не исторический сайт. Может быть, когда я проведу весеннюю уборку и откопаю старые диски, я выложу фото или что-то в этом роде. В противном случае, вы можете пойти в музей истории компьютеров или в магазин компьютерной техники «мама-и-поп» и найти старые жесткие диски, если это так важно для вас. В наши дни большинство mfgs нарочно используют ярлыки, которые заставляют вещи звучать больше. Как я уже сказал, они могли бы сделать это 73 400 320 байтов, чтобы создать диск 70 МБ, если бы захотели, но зачем беспокоиться, когда они могут дешево и все еще технически назвать его 70 МБ? Опять же, это не заговор, это обычная маркетинговая обманчивость.
Synetech
2
Я уже просмотрел архивы битсаверов, и все примеры, которые я нашел, являются десятичными. Этот миф о том, что производители дисков в какой-то момент перешли от двоичного к десятичному, чтобы обмануть покупателей, - чокнутый. Они были написаны не отделами маркетинга, а инженерами, использующими стандартные устройства, которые используют инженеры. Логично и разумно назвать 70 000 000-байтовый диск IBM 3340 «70 МБ». Это то, что «мега» всегда означало, и это то, что пользователи ожидают. Называть его «66 МБ» в некоторых местах и ​​«68 359 КБ» в других местах, как это делает Microsoft Windows, безумие.
эндолит
1
@endolith, никто не сказал, что они перешли на десятичную, чтобы обмануть, просто они намеренно продают их таким образом, хотя они знают о путанице и могут сделать диск 73 400 320 байт вместо всего лишь 70 000 000, что не является круглым числом в компьютерах. Что касается вашего заявления о том, что оно «всегда» означает, что здесь уже есть нить о том, когда бинарные блоки начали использоваться, и это было давно, прежде чем компьютеры стали потребительскими товарами.
Synetech
-4

Некоторые ответы не точны.

Давайте сначала сделаем несколько заметок:

Приставка «килограмм» означает 1 000. Приставка «кило» к чему-либо означает 1 000 этого предмета. То же самое верно для "мегапикселей" или "миллионов", "гига" или "миллиардов", "тера" или "триллионов" и так далее.

Причина, по которой 1 024 существует вместо простого 1 000, заключается в том, как работает двоичная арифметика. Двоичный код, как следует из его названия, является системой с основанием 2 (имеет 2 цифры: 0, 1). Он может выполнять арифметику только с двумя цифрами, в отличие от базовой системы 10, которую мы используем ежедневно (0, 1, 2 ... 9), которая имеет десять цифр.

Чтобы получить число 1 000 ( кило ) с помощью двоичной арифметики, необходимо выполнить вычисление с плавающей запятой. Это означает, что двоичная цифра должна переноситься при каждой операции до достижения 1 000. В системе Base 10 1 000 = 10 3 (вы всегда повышаете 10 до мощности в базе 10), это очень простой и быстрый расчет для компьютера, который можно выполнять без «остатков», но в системе Base 2 это невозможно поднять 2 (вы всегда повышаете 2 до степени в основании 2) до любого натурального числа, чтобы получить 1 000. Необходимо использовать операцию с плавающей запятой или длительное сложение, и для ее выполнения требуется больше времени, чем для вычисления целых чисел 2 10 = 1024

Возможно, вы заметили, что 2 10 = 1 024 соблазнительно близко к 1 000, а 1 024 к 1 значащему значению - 1 000 (очень хорошее приближение), и обратно, когда скорость процессора была низкой, как у старой собаки, и память была очень ограничена это было довольно приличное приближение и с ним очень легко работать, не говоря уже о быстром исполнении.

Именно по этой причине термины с префиксами «кило», «мега», «гига» и т. Д. Застряли с неточными цифрами (1 024, 2 048, 4 096 и т. Д.). Они никогда не предназначались для того, чтобы быть точными числами, они были двоичными приближениями базовых 10 чисел. Они просто возникли как жаргонные слова, которые использовали «технические» люди.

Чтобы еще больше усложнить задачу , JEDEC разработала собственные стандарты для устройств, используемых в полупроводниковых схемах памяти. Давайте сравним некоторые единицы JEDEC с единицами СИ (стандартными международными):

Кб = килобит (JEDEC, 1 024 бита. Обратите внимание на верхний регистр 'K' и нижний регистр 'b')
kB = килобит (SI, 1 000 бит. Обратите внимание на нижний регистр 'k' и верхний регистр 'B')

b = бит (JEDEC, обратите внимание на нижний регистр 'b')
b = ??? (SI не определяет слово «бит», поэтому его использование может быть произвольным)

B = байт (JEDEC, 8 бит. Обратите внимание на верхний регистр 'B')
B = ???? (SI не определяет слово «байт», а «B» используется для «Bel» [как в DeciBel])

KB = килобайт (JEDEC, 1 024 байта. Обратите внимание на верхний регистр 'K' и 'B')
kb = килобайт (SI, 1 000 байтов. Обратите внимание на использование нижнего регистра 'k' и нижнего регистра 'B')

Дело в том, что в разных местах используются разные префиксы с разными определениями. Не существует жесткого и быстрого правила относительно того, какой из них вы должны использовать, но следуйте тому, который вы используете.

Из-за понижающего голосования, позвольте мне уточнить, почему вы не можете заработать 1 000 в двоичном виде, увеличив его до любого положительного целого числа.

Бинарная система:

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

Обратите внимание, что в двоичной системе столбцы каждый раз дублируются. Это в отличие от системы base 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.

user3005790
источник
3
Я полагаю, что вы ошибаетесь, утверждая, что число 1000 нуждается в арифметике с плавающей точкой. Вы можете представить любое натуральное число, используя любую систему нумерации. На самом деле, двоичный эквивалент 1000 равен 1111101000 .
Doktoro Reichard
Докторо, пожалуйста, помните, что мы работаем в двоичной системе или базе 2, так что вы на самом деле тот, кто не прав. Вот первые 10 степеней числа 2 в двоичной форме (база 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 (двоичное 2 ... не базовая десятка 2) до любого положительного целого числа, чтобы сделать 1 000. Я все равно ценю отрицательный голос.
user3005790
Это не объясняет различия между битом и байтом. На самом деле существует «жесткое быстрое правило» 1 Кбайт - одна тысяча битов, 1 КБ - одна тысяча байтов. Это огромная разница. 8 КБ - это 1 КБ.
Ramhound
3
Хотя это утверждение верно, вам все равно не нужно выполнять какую-либо арифметику с плавающей запятой. Вы понимаете степень 2, поэтому вы также можете понять, что 1111101000 = 2 ^ 9 + 2 ^ 8 + 2 ^ 7 + 2 ^ 6 + 2 ^ 5 + 2 ^ 3 = 1000.
Доктор Рейхард
1
Я не верю, что «Они никогда не были точными числами, они были двоичными приближениями чисел с основанием 10», это правда; Я думаю, что это всего лишь результат аппаратного обеспечения, которое было (ограничено) хранением единиц и нулей и аппаратной адресации с использованием двоичных регистров. Оба являются основой 2; Я не думаю, что это связано с приблизительными расчетами по основанию 10. Кроме того, я не вижу смысла в расчетах. Это не похоже на то, как на выходе компьютера показывалось бы 1024 там, где он на самом деле намеревался показать 1000, или 1000, когда внутренне это было бы 1024. На какие расчеты вы ссылаетесь?
Арьян