6

Предположим, у меня есть 30-битная оперативная память для расчета ее размера: 2 ^ 30 = 1073741824/10 ^ 9 = 1 ГБ

Что если бы у меня было, например, 512 МБ ОЗУ, есть ли формула для его преобразования в n-bit ? это может быть нуб вопрос, но я не очень разбираюсь в математике:/

2 ответа2

18

Вы ищете логарифм, в частности, логарифм с основанием два. Логарифмы противоположны возведению в степень, поэтому если 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.

4

В дополнение к тому, что сказал Бен, я рекомендую сначала сделать логарифм вашего числа без единиц

log₂512 = 9

А затем примите во внимание единицы: сумма 10 для кибибайтов, 20 для мебибайт, 30 для гибибайт, ...

9 + 20 = 29

И это все. Не нужно рассчитывать огромные числа. Это потому, что логарифмы имеют следующие свойства:

logₙ(a × b) = logₙ(a) +  logₙ(b)
logₙ(aᵇ) = b × logₙ(a)

Следовательно,

log₂(512 × 2²⁰) = log₂(512) + 20

Однако, если вы уже знаете log know log₂(1 GiB) = 30 ,

log₂(512 MiB) = log₂(1 GiB / 2) = log₂(1 GiB) - log₂(2) = 30 - 1 = 29

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .