Предположим, у меня есть 30-битная оперативная память для расчета ее размера: 2 ^ 30 = 1073741824/10 ^ 9 = 1 ГБ
Что если у меня, например, 512 МБ ОЗУ, есть ли формула для его преобразования n-bit
? это может быть нуб вопрос, но я не очень разбираюсь в математике: /
operating-systems
пользователь
источник
источник
Ответы:
Вы ищете логарифм , в частности, логарифм с основанием два. Логарифмы противоположны возведению в степень, поэтому если b x = y, то x = log b y. 2 4 = 16, поэтому log 2 16 = 4.
Во-первых, вам нужно выяснить, сколько у вас байтов. Если ваш номер в килобайтах, умножьте на 2 10 . Для мегабайт 2 20 , для гигабайт 2 30 и так далее. Как видите, я использую определения степеней 1024 этих единиц, а не определения степеней 1000, поэтому один килобайт здесь составляет 1024 байта. Однозначное имя для 1024 байта - кибибайт . В любом случае, 512 МБ равно 512 • 2 20 = 536870912 байт.
Теперь вам понадобится научный калькулятор. Мне нравится Wolfram Alpha , которая позволяет вам делать логарифмы с двумя основными значениями с помощью
log2
функции.log2(536870912)
выдает 29, что имеет смысл, учитывая, что 512 МБ - это половина от 1 ГБ, так что требуется на одну мощность меньше двух. Вы можете использовать практически любой оператор, который можно представить в выражении Wolfram Alpha, так что этоlog2(512 * 10^20)
тоже работает .Если вы получите число с десятичной частью, округлите вверх. Например, вам потребуется три бита для адресации пяти байтов оперативной памяти, хотя
log2(5)
это примерно 2,32.источник
log2(536870912)
просто отлично .log(536870912) / log(2)
можно было бы упомянуть в случаеlog2()
недоступности.[math]::Log(536870912, 2)
. Илиecho "l(536870912)/l(2)" | bc -l
илиpython -c 'import math; print math.log(536870912, 2)'
В дополнение к тому, что сказал Бен, я рекомендую сначала сделать логарифм вашего числа без единиц
А затем примите во внимание единицы: сумма 10 для кибибайтов, 20 для мебибайт, 30 для гибибайт, ...
Вот и все. Не нужно рассчитывать огромные числа. Это потому, что логарифмы имеют следующие свойства:
Следовательно,
Однако, если вы уже знаете
log₂(1 GiB) = 30
,источник