Почему в килобайте бывает 1000 или 1024 байта

По международным правилам 1 кБ равен 1000 байтам, а 1024 байта называются 1 КиБ. Путаница сохранилась из старой компьютерной практики.

Почему в килобайте бывает 1000 или 1024 байта

Дальше вы узнаете, почему число 1024 оказалось рядом с приставкой «кило», как стандарт разделил кБ и КиБ, откуда берутся «пропавшие» гигабайты и какой коэффициент выбирать для расчёта.

В статье вы узнаете:

Число 1024 появилось из двоичной архитектуры

Компьютер хранит и обрабатывает данные через состояния, которые удобно описывать нулями и единицами. Поэтому объёмы памяти естественно росли степенями двойки: 2, 4, 8, 16 и дальше. После 512 следующая степень равна 1024, или 210.

Число 1024 оказалось подозрительно близко к тысяче: разница составляет всего 24 байта, или 2,4%. Ранним программистам и инженерам было удобно называть группу из 1024 элементов «килобайтом», хотя метрическая приставка «кило» уже означала умножение на 1000. На небольших объёмах сокращение почти не мешало. На больших оно превратилось в заметную разницу.

1 KiB=210 B=1024 B\displaystyle 1\ \text{KiB}=2^{10}\ \text{B}=1024\ \text{B}

Здесь B обозначает байт. Современный байт содержит 8 бит, поэтому 1 КиБ равен 8192 битам. Бит обозначают строчной буквой b, байт прописной B. Разница в регистре маленькая, а в количестве данных восьмикратная.

Так возникло не новое свойство приставки «кило», а профессиональная привычка. Она закрепилась в документации, программах и речи раньше, чем у двоичных кратных появились отдельные названия. Поэтому выражение «килобайт равен 1024 байтам» долго выглядело нормой, хотя смешивало две системы.

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

Стандарт разделил килобайты и кибибайты

В Международной системе единиц приставка «кило» означает строго 103, то есть 1000. Актуальная Брошюра SI отдельно предупреждает, что десятичные приставки не следует использовать для степеней двойки. Поэтому 1 kB равен 1000 B, как 1 километр равен 1000 метрам. [BIPM, Брошюра SI]

Для 1024 байт Международная электротехническая комиссия ввела двоичную приставку киби, сокращение от kilobinary. Её символ Ki, поэтому 1024 байта записываются как KiB, по-русски КиБ. Следующие ступени называются mebi, gibi и tebi: MiB, GiB и TiB.

IEC утвердила эти названия в декабре 1998 года, а поправка к стандарту IEC 60027-2 вышла в январе 1999 года. NIST объясняет причину прямо: привычные приставки SI обозначают точные степени десяти, а для обработки и передачи данных понадобились отдельные названия точных степеней двойки. [NIST, двоичные приставки]

Килобайт и кибибайт являются разными единицами. 1 кБ = 1000 байт, 1 КиБ = 1024 байта. По тому же правилу 1 МБ = 1 000 000 байт, а 1 МиБ = 1 048 576 байт.

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

Поэтому запись без контекста иногда остаётся двусмысленной. Строгий вариант решает проблему обозначениями kB и KiB. Если интерфейс использует только привычные КБ, МБ и ГБ, ищите описание коэффициента или сравните результат с точным числом байтов.

Расхождение растёт вместе с размером

На первой ступени разница между 1000 и 1024 равна 2,4%. Дальше коэффициент применяется снова. Мегабайт строится как 1000 × 1000 байт, а мебибайт как 1024 × 1024 байта. На уровне гигабайта множитель используется трижды, на уровне терабайта четырежды.

Десятичные и двоичные единицы в байтах
УровеньДесятичная единицаДвоичная единицаРазница
Кило1 кБ = 10001 КиБ = 10242,4%
Мега1 МБ = 1 000 0001 МиБ = 1 048 5764,86%
Гига1 ГБ = 1 000 000 0001 ГиБ = 1 073 741 8247,37%
Тера1 ТБ = 1 000 000 000 0001 ТиБ = 1 099 511 627 7769,95%

Проценты в последнем столбце сравнивают двоичную единицу с десятичной того же уровня. Один КиБ больше одного кБ на 2,4%, а один ТиБ больше одного ТБ уже почти на 10%. Именно повторное возведение коэффициента в степень превращает маленькие 24 байта в десятки гигабайтов разницы.

Три пары полос показывают, как двоичная единица всё сильнее превышает десятичную от килобайта к гигабайту
Сверху вниз показаны пары кБ и КиБ, МБ и МиБ, ГБ и ГиБ. В каждой паре верхняя синяя полоса является десятичной единицей, а коралловый хвост нижней показывает дополнительный объём двоичной.

Сравнивать нужно именно одинаковые уровни. Один МиБ больше одного МБ. Но при переходе от МиБ к ГиБ число делят на 1024, а от МБ к ГБ на 1000. Сначала зафиксируйте исходную единицу, затем множитель и только после этого округляйте результат.

Накопитель не теряет гигабайты при подключении

Представим накопитель с маркировкой 1 ТБ. В десятичной системе это ровно 1 000 000 000 000 байт. Если программа делит то же число на 230, она получает 931,32 двоичных гигабайта, то есть ГиБ. Интерфейс при этом может по привычке написать «931 ГБ».

Разница между 1000 и 931 не означает, что производитель спрятал 69 миллиардов байтов. Программа просто пересчитала тот же триллион байтов более крупными порциями. Это похоже на 1000 граммов и 1 килограмм: число изменилось вместе с размером единицы, количество вещества осталось тем же.

С накопителем на 500 ГБ получится около 465,66 ГиБ. Чем больше заявленная ёмкость, тем заметнее числовой разрыв. Именно поэтому коробка, системная информация и программа для разметки диска могут показывать разные числа.

Пересчёт единиц и занятое место являются разными причинами. Форматирование создаёт служебные структуры, операционная система и приложения занимают часть накопителя, а некоторые устройства резервируют отдельные разделы. Эти байты действительно недоступны пользователю. Переход от ТБ к ТиБ ничего не занимает, он только меняет масштаб записи.

Есть простой способ проверить ситуацию. Найдите точную ёмкость в байтах. Если она близка к заявленному десятичному значению, основная разница возникла из-за единиц. Затем отдельно посмотрите занятое место и служебные разделы. Так одна загадка распадается на два обычных расчёта.

Сначала найдите обозначение, затем выбирайте коэффициент

Для точного перевода достаточно короткой последовательности:

  1. Отделите биты от байтов. Строчная b означает бит, прописная B байт. Чтобы получить байты из битов, разделите число на 8.
  2. Проверьте приставку. k, M, G и T означают степени 1000. Ki, Mi, Gi и Ti означают степени 1024.
  3. Уточните правило программы. Если интерфейс пишет только КБ или МБ, описание либо контрольный пример должны показать, какой коэффициент используется.
  4. Считайте через байты. Это снимает неоднозначность. Сначала переведите исходное значение в байты, затем разделите на размер нужной единицы.
  5. Округляйте в конце. Преждевременное округление на каждой ступени накапливает дополнительную ошибку.

Например, 8000 бит равны 1000 байтам. Это ровно 1 кБ, но около 0,9766 КиБ. А 8192 бита равны 1024 байтам: ровно 1 КиБ и 1,024 кБ. Сначала можно перевести биты в байты, а затем выбрать нужное основание.

Конвертер eCalc из битов в 1024-байтные блоки использует двоичный коэффициент. Перевод килобайтов в мегабайты тоже следует старой двоичной практике и делит значение на 1024. В строгой записи такие результаты соответствуют КиБ и МиБ.

Если единица подписана точно, противоречия нет: 1 кБ всегда равен 1000 байтам, 1 КиБ всегда равен 1024. Путаница начинается только там, где старое слово «килобайт» используют для двух разных порций данных. Проверяйте букву i или исходное число байтов, и пропавшие гигабайты обычно находятся быстрее, чем открывается калькулятор.

Есть что добавить?

Напишите своё мнение, комментарий или предложение.