Obliczanie bitów pamięci RAM

6

Rozważ, że mam 30-bitową pamięć RAM, aby obliczyć jej rozmiar: 2 ^ 30 = 1073741824/10 ^ 9 = 1 GB

Co jeśli mam na przykład 512 MB pamięci RAM, czy istnieje formuła do konwersji n-bit? to może być pytanie nooba, ale nie jestem dobry z matematyki: /

użytkownik
źródło
Liczba bajtów * 8? ;) zwróć uwagę na prefiks dla k MGT lub ki ... Gi ...
Hastur
Nie Chcę przekonwertować go na n-bit, tak jak w przykładzie w pierwszym wierszu
użytkownik
1
Twoja kalkulacja pierwszego rzutu jest nie tak: wynik wynosi ~ 1 Gigabit (1G b ) lub ~ 128 megabajtów (128M B ).
AFH
4
@AFH Myślę, że OP oznaczało, że jeden gigabajt pamięci RAM można rozwiązać za pomocą 30-bitowego wskaźnika, zakładając, że każda lokalizacja pamięci RAM jest bajtem.
Ben N

Odpowiedzi:

18

Szukasz logarytmu , w szczególności logarytmu podstawowego. Logarytmy robią odwrotnie niż potęgowanie, więc jeśli b x = y, to x = log b y. 2 4 = 16, więc log 2 16 = 4.

Najpierw musisz dowiedzieć się, ile bajtów masz. Jeśli twój numer jest w kilobajtach, pomnóż przez 2 10 . Dla megabajtów, 2 20 , dla gigabajtów 2 30 i tak dalej. Jak widać, używam definicji potęg-1024 tych jednostek, a nie definicji potęg-1000, więc jeden kilobajt to 1024 bajty. Jednoznaczna nazwa 1024 bajtów to kibibajt . W każdym razie 512 MB to 512 • 2 20 = 536870912 bajtów.

Teraz potrzebujesz kalkulatora naukowego. Lubię Wolfram Alpha , która umożliwia wykonywanie dwóch logarytmów podstawowych za pomocą log2funkcji. log2(536870912) daje 29, co ma sens, biorąc pod uwagę, że 512 MB to połowa 1 GB, więc potrzeba o jedną moc mniejszą od dwóch. W wyrażeniu Wolfram Alpha można użyć praktycznie dowolnego operatora, który można sobie wyobrazić, więc log2(512 * 10^20) też działa .

Jeśli otrzymasz liczbę z częścią dziesiętną, zaokrąglij w górę. Na przykład potrzebujesz trzech bitów, aby zaadresować pięć bajtów pamięci RAM, choć log2(5)jest to w przybliżeniu 2,32.

Ben N.
źródło
6
Do Twojej wiadomości, Google również log2(536870912)dobrze ocenia .
Bob
4
Wydaje się, że log(536870912) / log(2)można wspomnieć w przypadku, gdy log2()jest niedostępny.
grawity
Chociaż jest to omówione w powiązanym artykule w Wikipedii, poprawiłoby tę odpowiedź, dodając kilka słów o tym, dlaczego szukasz logarytmu. W ten sposób można go rozumieć nie jako dziwną koncepcję matematyczną, ale po prostu jako odwrotną operację do potęgowania, którą pytający już ma.
Cody Gray
możesz użyć programu PowerShell [math]::Log(536870912, 2). Lub echo "l(536870912)/l(2)" | bc -llubpython -c 'import math; print math.log(536870912, 2)'
phuclv
4

Oprócz tego, co powiedział Ben, zalecam najpierw wykonać logarytm liczby bez jednostek

log₂512 = 9

A następnie weź pod uwagę jednostki: suma 10 dla kibibajtów, 20 dla mebibajtów, 30 dla gibibajtów, ...

9 + 20 = 29

I to wszystko. Nie trzeba obliczać wielkich liczb. Jest tak, ponieważ logarytmy mają następujące właściwości:

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

W związku z tym,

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

Jeśli jednak już wiesz log₂(1 GiB) = 30,

log₂(512 MiB) = log₂(1 GiB / 2) = log₂(1 GiB) - log₂(2) = 30 - 1 = 29
Oriol
źródło