Skrivet av mhj:
Okej då försökte jag omvandla 16 000 till hexadecimalt på ett sätt som jag vet. Då fick jag 3*16^3 + 14*16^2 + 8*16^1 + 0*16^0 vilket ger 3E80. Men i facit står det 4000, vettefan vad jag gjort fel.
Då har de räknat med binära prefix som konvention, vilket nog är klart av sammanhanget (dessutom borde deras "k" vara ett "K").
De "vanliga" decimala prefixen markerar grupper om 10³ = 1000, så
k = 1000¹ = 1000
M = 1000² = 1 000 000
G = 1000³ = 1 000 000 000
osv.
De binära prefixen är en praktisk artefakt från datorns värld som används inom branschen i olika former. Här markerar man grupper om 2¹⁰ = 1024 ≈ 1000. Med denna konvention får vi i stället
K = 1024¹ = 1024
M = 1024² = 1 048 576
G = 1024³ = 1 073 741 824
En sidonotis är att det där med "≈" blir mer och mer problematiskt ju större prefixen är:
(1024 ∕ 1000)¹ − 1 = 2.4 %
(1024 ∕ 1000)² − 1 = 4.9 %
(1024 ∕ 1000)³ − 1 = 7.3 %
(1024 ∕ 1000)⁴ − 1 = 10.0 %
(1024 ∕ 1000)⁵ − 1 = 12.6 %
(1024 ∕ 1000)⁶ − 1 = 15.3 %
(1024 ∕ 1000)⁷ − 1 = 18.1 %
(1024 ∕ 1000)⁸ − 1 = 20.9 %
(1024 ∕ 1000)⁹ − 1 = 23.8 %
(1024 ∕ 1000)¹⁰ − 1 = 26.8 %
vilket är delaktigt i otaliga frågor på datorforum världen över gällande vart hårddiskutrymmet "tog vägen".
Vill man vara tydlig så betecknar man binära prefix med "Ki", "Mi", "Gi", etc., i stället för att återanvända beteckningar som redan är definierade i en snarlik kontext men låta dem betyda en annan sak, men branschen är som den är, så jag antar att det är lärorikt att vara otydlig här .
Om vi uttrycker de binära prefixen som just binära tal så ser man kanske enklare varför de är praktiska. Jag använder nedsänkt index för att beteckna icke-decimala talbaser nedan (och jag försöker högerjustera högerleden för tydlighet, men om det lyckas beror på vilken webbläsare och vilket teckensnitt läsaren använder; troligen lyckas det inte för de flesta):
K = (1024)¹ = 0100 0000 0000₂
M = (1024)² = 0001 0000 0000 0000 0000 0000₂
G = (1024)³ = 0100 0000 0000 0000 0000 0000 0000 0000₂
där högerleden är skrivna som binära tal ("bas 2") som jag tagit mig friheten att gruppera om fyra siffror (och fyllt på med nollor till vänster för att tydliggöra den första gruppen). Man lägger helt enkelt på "10 nollor" för varje extra faktor 2¹⁰.
Poängen med hexadecimala tal är sedan att dess bas 16 ("hexa" = 6, "deca" = 10) i sig är en jämn potens av den binära basen 2 (2⁴ = 16). Detta gör konverteringar däremellan mycket enklare än från och till decimala tal: vi kan helt enkelt se de binära talen som grupper om fyra som var och en motsvarar en hexadecimal siffra, och det är inga jobbiga "rester" att ta hänsyn till. Detta kan du se genom att exempelvis konvertera några tal från binärt till decimalt och vidare till hexadecimalt: du märker att du behöver genomföra "inversa" operationer på varje sida om mellansteget med decimal bas, så det är enklare att konvertera direkt.
Om vi tittar på prefixen uttryckta i binär form ovan så ser vi då, eftersom jag redan grupperat dem i fina fyragrupper, att de hexadecimalt motsvarar i tur och ordning:
K = 04 00₁₆
M = 10 00 00₁₆
G = 40 00 00 00₁₆
Notera hur varje enskild siffra i hexadecimal notation alltså bara är en konvertering av motsvarande "fyragrupp" i binär notation (jag grupperar de hexadecimala talen i grupper om två av konvention och fyller på med nollor till vänster likt tidigare; varje "tvågrupp" motsvarar då 8 bitar vilket är 1 byte i datorsammanhang, vilket är trevligt ).
Så, till slut, för att översätta exempelvis 64K till hexadecimal notation så kan man antingen ta steget via decimal notation likt du gjorde ovan:
64K = 64 ⋅ 1024¹ = 65 536
= [65 536 ∕∕ 16 = 4096, rest 0; 4096 ∕∕ 16 = 256, rest 0; 256 ∕∕ 16 = 16, rest 0; 16 ∕∕ 16 = 1, rest 0; 1 ∕∕ 16 = 0, rest 1; 0 < 16, så vi slutar här]
= 01 00 00₁₆
eller uttrycka sig binärt och konvertera grupper om fyra (vilket ibland kan vara lättare att göra i huvudet än att beräkna divisioner):
64K = 0001 0000 0000 0000 0000₂ = [översätt varje grupp om fyra till en hexadecimal siffra] = 01 00 00₁₆
Gör man detta några gånger så ser man att man egentligen bara behöver "räkna" på den första "fyragruppen" och sedan fylla på med rätt antal nollor enligt använt prefix.