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: /
operating-systems
użytkownik
źródło
źródło
Odpowiedzi:
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ą
log2
funkcji.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ęclog2(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.źródło
log2(536870912)
dobrze ocenia .log(536870912) / log(2)
można wspomnieć w przypadku, gdylog2()
jest niedostępny.[math]::Log(536870912, 2)
. Lubecho "l(536870912)/l(2)" | bc -l
lubpython -c 'import math; print math.log(536870912, 2)'
Oprócz tego, co powiedział Ben, zalecam najpierw wykonać logarytm liczby bez jednostek
A następnie weź pod uwagę jednostki: suma 10 dla kibibajtów, 20 dla mebibajtów, 30 dla gibibajtów, ...
I to wszystko. Nie trzeba obliczać wielkich liczb. Jest tak, ponieważ logarytmy mają następujące właściwości:
W związku z tym,
Jeśli jednak już wiesz
log₂(1 GiB) = 30
,źródło