Конвертер размеров данных
Переводит размер сразу в десятичные и двоичные единицы — KB рядом с KiB, MB рядом с MiB — с битами, точным числом байтов и тем, что показывает каждая ОС.
1,000,000,000,000B1,000,000,000,000KB1,000,000,000MB1,000,000GB1,000TB1
KiB976,562,500MiB≈ 953,674.3164GiB≈ 931.3226
bit8,000,000,000,000Kb8,000,000,000Mb8,000,000Gb8,000Tb8
Те же байты, пять прочтений. Ни одно не ошибочно; они расходятся в делителе, в подписи или в обоих.
- Проводник Windows — делит на 1024, оставляет десятичные подписи
931 GB - Finder в macOS — делит на 1000
1 TB - ls -lh, du -h — делят на 1024
932G - ls --si, du --si — делят на 1000
1.0T - Производители дисков и флешек — делят на 1000
1 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.
- Отправляется ли что-нибудь из введённого на сервер?
- Нет. Это арифметика в вашем браузере; ничего не выгружается и не записывается, и это работает без сетевого соединения.