Конвертер размеров данных

Переводит размер сразу в десятичные и двоичные единицы — KB рядом с KiB, MB рядом с MiB — с битами, точным числом байтов и тем, что показывает каждая ОС.

Точное число байтов
1,000,000,000,000
Десятичные
Степени 1000 — СИ, производители дисков, macOS
  • B1,000,000,000,000
  • KB1,000,000,000
  • MB1,000,000
  • GB1,000
  • TB1
Двоичные
Степени 1024 — МЭК, Windows, ОЗУ
  • KiB976,562,500
  • MiB953,674.3164
  • GiB931.3226
Биты
Степени 1000 — скорости сети всегда десятичные
  • bit8,000,000,000,000
  • Kb8,000,000,000
  • Mb8,000,000
  • Gb8,000
  • Tb8
Как это покажут ваши инструменты

Те же байты, пять прочтений. Ни одно не ошибочно; они расходятся в делителе, в подписи или в обоих.

  • Проводник Windows — делит на 1024, оставляет десятичные подписи931 GB
  • Finder в macOS — делит на 10001 TB
  • ls -lh, du -h — делят на 1024932G
  • ls --si, du --si — делят на 10001.0T
  • Производители дисков и флешек — делят на 10001 TB

Что делает этот инструмент

Введите размер в любых единицах — 1 ТБ, 1536 MiB, 900 Mb или просто сырое число байтов, скопированное из списка файлов, — и он вернётся переведённым сразу в обе системы единиц, вместе с точным числом байтов и с тем, как его покажет каждый инструмент на вашей машине.

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

Почему у килобайта два значения

Компьютеры адресуют память степенями двойки, поэтому 1024 для машины — естественное круглое число так, как 1000 не будет никогда. Рано «кило» было позаимствовано для 1024, потому что оно было достаточно близко к тысяче СИ и никто не ждал, что эти двое разойдутся. Они разошлись.

Ошибка мала на нижнем конце и накапливается на каждой ступени. Килобайт расходится на 2,4%, мегабайт на 4,9%, гигабайт на 7,4%, терабайт на 10%. К петабайту два ответа расходятся на 12,6%, и это уже не деталь округления:

KB    1,000                 KiB    1,024                 # разница 2,4%
MB    1,000,000             MiB    1,048,576             # 4,9%
GB    1,000,000,000         GiB    1,073,741,824         # 7,4%
TB    1,000,000,000,000     TiB    1,099,511,627,776     # 10,0%

В 1998 году МЭК дала степеням 1024 собственные имена — кибибайт, мебибайт, гибибайт — и обозначения KiB, MiB, GiB, именно чтобы двусмысленность можно было записать и убрать. Имена так и не прижились в обиходе, а обозначения прижились, и всё, помеченное KiB, однозначно. Всё, помеченное KB, по-прежнему нет.

Кто как считает

Разделение не случайно. Оно проходит примерно по линии между железом, которое адресуют, и железом, которое продают:

  • Оперативная память всегда двоичная. Модуль на 16 ГБ — это 16 ГиБ, потому что память адресуется двоичными строками и столбцами и не могла бы быть круглым десятичным числом, даже если бы попыталась.
  • Диски всегда десятичные. Производитель, продающий диск на 1 ТБ, имеет в виду 1 000 000 000 000 байт, и так задолго до того, как кто-либо начал жаловаться.
  • Windows двоичная, но пользуется десятичными подписями. Она делит на 1024 и пишет ГБ, и отсюда берётся большая часть путаницы, с которой люди сталкиваются на деле.
  • macOS десятичная начиная со Snow Leopard в 2009 году. Тот же диск, который под Windows показывает 931 ГБ, на Mac показывает 1 ТБ, и ни одна из машин не сломана.
  • Инструменты командной строки Linux дают и то и другое: ls -lh и du -h делят на 1024, а ключ --si у тех же команд делит на 1000.
  • Сети всегда десятичные, и они считают биты, а не байты.

Диск на 1 ТБ, который показывается как 931 ГБ

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

1,000,000,000,000 bytes         # что продал производитель
/ 1024 = 976,562,500 KB         # Windows делит один раз
/ 1024 = 953,674.32 MB          # дважды
/ 1024 = 931.32 GB              # трижды, затем подписывает GB

Диск не меньше заявленного, и операционная система не лжёт о числе байтов. Единственное, что неверно, — это подпись: то, что Windows называет 931 ГБ, на самом деле 931 ГиБ, а 931 ГиБ — это 1 ТБ. Вставьте любой размер в этот инструмент, и две колонки покажут это соотношение напрямую.

Биты и байты, и разница в восемь раз

Байт — это восемь бит, и на письме они различаются лишь регистром одной буквы: заглавная B означает байты, строчная b — биты. Mb и MB отличаются в восемь раз, чего с избытком хватает, чтобы расчёт потерял смысл.

Важнее всего это для скоростей сети, которые указывают в битах в секунду, тогда как размеры файлов и ход загрузки идут в байтах. Соединение 100 Мбит/с даёт не более 12,5 МБ/с, поэтому файл в 1 ГБ занимает около 80 секунд, а не те 10, что числа как будто обещают. Вас никто не ограничивает; единицы никогда не были одними и теми же.

Биты показаны здесь только в десятичной системе, и это не упрощение. Скорости сети определены в степенях десяти, поэтому мегабит — это миллион бит везде, где термин используется. МЭК действительно определяет двоичные единицы бит, но их практически ничто не использует, и предложить их значило бы пригласить к переводу, которого никто не имеет в виду.

Почему числа здесь точны

Числа в JavaScript хранят целые точно лишь примерно до девяти квадриллионов — 2^53. Эксабайт — это 10^18, намного дальше, поэтому конвертер, построенный на обычной арифметике, начинает терять разряды ровно там, где живут вопросы о больших хранилищах, и сообщает число байтов, уверенно неверное в последних разрядах.

Здесь всё вместо этого использует целые произвольной точности. Это даёт вдобавок кое-что менее очевидное: поскольку каждый участвующий множитель — степень десяти или двойки, а обе нацело делят некоторую степень десяти, всякий перевод между этими единицами завершается конечной десятичной дробью. 1 ТБ — это не примерно 931,32 ГиБ, а ровно 931,322574615478515625 ГиБ, без остатка. Строки здесь округлены для чтения, а число байтов над ними — это ответ целиком.

Частые вопросы

Килобайт — это 1000 байт или 1024 байта?
И то и другое, смотря кто считает. СИ и производители дисков используют 1000; Windows и объёмы оперативной памяти — 1024. МЭК даёт единицам по 1024 отдельные имена — кибибайт, мебибайт, гибибайт, — что снимает двусмысленность, хотя старые обозначения по-прежнему повсюду. Этот инструмент показывает оба прочтения сразу, а не выбирает одно.
Почему мой диск на 1 ТБ показывает лишь 931 ГБ?
Ничего не пропало. Производитель продал вам 1 000 000 000 000 байт, считая степенями 1000. Windows делит это на 1024 трижды, получает 931,32 и затем подписывает результат как ГБ. Те же байты, другой делитель, вводящая в заблуждение подпись: то, что она вам показывает, на самом деле 931 ГиБ.
В чём разница между МБ и МиБ?
Мегабайт — это 1 000 000 байт, а мебибайт — 1 048 576 байт, так что МиБ примерно на 4,9% больше. МиБ однозначен по определению; МБ однозначен только если вы знаете, какого соглашения держится инструмент, который его напечатал.
Почему загрузка медленнее скорости моего соединения?
Обычно потому, что они измеряются в разных единицах. Скорости соединения указывают в мегабитах в секунду, а загрузки — в мегабайтах в секунду, и в байте восемь бит. Линия 100 Мбит/с даёт максимум около 12,5 МБ/с.
Что на самом деле означает ограничение загрузки или хранилища в 25 МБ?
Это зависит от сервиса, и безопасное предположение — меньшее число. Если предел применяется как 25 × 1 000 000 байт, файл чуть меньше 25 МиБ будет отклонён. Перевод размера вашего файла в обе колонки сразу показывает, проходит ли он оба прочтения.
Справляется ли он с очень большими размерами?
Да. Арифметика использует целые произвольной точности, поэтому эксабайты, зеттабайты и йоттабайты переводятся точно, а не теряют последние разряды, как это делают обычные числа с плавающей точкой за пределами 2^53.
Отправляется ли что-нибудь из введённого на сервер?
Нет. Это арифметика в вашем браузере; ничего не выгружается и не записывается, и это работает без сетевого соединения.