Расчет битов оперативной памяти

6

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

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

пользователь
источник
Количество байтов * 8? ;) обратите внимание на префикс для k MGT или ki ... Gi ...
Hastur
Нет, я хочу преобразовать его в n-бит, как в примере в первой строке
пользователь
1
Ваш расчет в первой строке неверен: результат составляет ~ 1 гигабит (1G b ) или ~ 128 мегабайт (128M B ).
AFH
4
@AFH Я думаю, что OP означал, что один гигабайт оперативной памяти может быть адресован 30-битным указателем, предполагая, что каждая ячейка памяти является байтом.
Бен Н

Ответы:

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(536870912) / log(2)можно было бы упомянуть в случае log2()недоступности.
Гравитация
Несмотря на то, что он описан в связанной статье в Википедии, этот ответ будет лучше, если добавить несколько слов о том, почему вы ищете логарифм. Таким образом, его можно понимать не как эту странную математическую концепцию, а просто как обратную операцию к возведению в степень, которую уже просил просящий.
Коди Грей
Вы можете использовать powershell [math]::Log(536870912, 2). Или echo "l(536870912)/l(2)" | bc -lилиpython -c 'import math; print math.log(536870912, 2)'
phuclv
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₂(1 GiB) = 30,

log₂(512 MiB) = log₂(1 GiB / 2) = log₂(1 GiB) - log₂(2) = 30 - 1 = 29
Ориоль
источник