JavaScript Menus and DHTML Menus Powered by Milonic Cyndeline Translations

Räkna i hex

För att lära sig så mycket som möjligt om romhackning, kommer här en crash-course i binära och hexdecimala tal.

Decimala tal

Decimala tal är det talsystem vi använder oss av i vardagen. Systemet har basen 10, och använder sig av de tio siffrorna 0-9.

10, 100, 1000, 10000 osv.


Binära tal

Har basen 2.

Som de flesta vet, så består binära tal bara av ettor och nollor (1 och 0). Dessa siffror (alltså en etta eller en nolla) kallas för en "bit". Skriver man ett tal som innehåller åtta 1:or och/eller 0:or, så kallas talet för en byte, och om du skriver ett tal som innehåller två byte (eller 16 bit) så kallar man det ett "word".

Det binära talsystemet är alltså det system som datorer, CD-skivor etc använder för att lagra information. Roms består, precis som alla andra filer på datorn, utav ettor och nollor.

Om man nu är lite kvick, så inser man att det lägsta talet man kan skriva i binär form är 0, medans det högsta är 1. Det lägsta talet i en byte (dvs 8 bit) är 00000000, medans det högsta är 11111111.

Här kommer talen 0-15, skrivna i binär form:

0=0
1= 1
2= 10
3= 11
4= 100
5= 101
6= 110
7= 111
8= 1000
9= 1001
10= 1010
11= 1011
12= 1100
13= 1101
14= 1110
15= 1111
osv

Givetvis kan man även skriva tal ovanför 15 i binär form.

16= 10000
5113= 1001111111001
etc.

Däremot så är de första 16 talen viktiga i ett hexdecimalt sammanhang.

Finns det då något sätt att konvertera dessa tal till det decimala talsystemet? Jodå, det finns det. Man behöver "bara" ta siffran längst till höger och multiplicera det med två upphöjt till den position som siffran har från höger. Sedan göra samma sak med resterande siffror.

Snabb mattelektion, för er som inte vet hur man räknar i "upphöjd" form.

Om man höjer upp ett tal med tex 3, så betyder det att man multiplicerar talet med sig självt 3 gånger. 2 upphöjt till 3 (skrivs 2^3) är därför 2x2x2 som är lika med 8 (2x2=4, 4x2=8).

Krångligt? Här kommer ett exempel med 11111111 (1 byte, vad 00000000 blir i decimal form vet du nog redan):

Först tar jag siffran längst till höger (dvs 1). Eftersom den står längst till höger, så har den platsen "0" i ordningen. 1:an som står till vänster om denna har plats "1" osv.

11111111 (denna siffra syftar jag nu på)

1x2^0 = 1x1 = 1

11111111 (Nu vidare till denna)

1x2^1 = 1x2 = 2

osv.

1x2^2 = 1x4 = 4

1x2^3 = 1x8 = 8

1x2^4 = 1x16 = 16

1x2^5 = 1x32 = 32

1x2^6 = 1x64 = 64

1x2^7 = 1x128 = 128


Sådär, det var alla siffrorna. Om vi nu skulle ta och lägga ihop dessa tal, så får vi:

1+2+4+8+16+32+64+128 = 255

Vad betyder det? Jo, att en byte alltid representerar ett tal mellan 0-255. Detta blir 256 olika kombinationer (nollan räknas ju också).

Hexdecimala tal

Ifall du aldrig tidigare stött på binära tal tidigare, har din hjärna med största sannorlikhet fått härdsmälta vid det här laget. Vad har allt detta att göra med hexdecimala tal kanske du undrar?

Jo, till att börja med så har hexdecimala tal basen 16. Det betyder att systemet använder sig av 16 siffror. Problemet är bara att det inte finns tillräckligt med siffror i det decimala talsystemet (som bara har 10 siffror), så av den anledningen lånar man istället bokstäver från alfabetet och använder dem istället. Det blir då så här:

0 1 2 3 4 5 6 7 8 9 A(10) B(11) C(12) D(13) E(14) F(15)

Notera att det rör sig om 16 SIFFROR, nollan räknas också. Efter varje bokstav ser du vilket decimalt värde de representerar, men bokstäverna är i det här fallet siffror.

Anledningen till att man använder sig av dessa, är att det ser lite väl krångligt ut att skriva ett spels kod i binär form. Därför använder man hexdecimaler (som kan omvandlas till binär form) för att underlätta det hela. Det hexdecimala talsystemet används alltså i syfte att underlätta läsandet av binär kod för männinskor. Datorer använder sig fortfarande bara av ettor och nollor.

Hur sker då själva omvandlingen? Hexdecimala tal består av två siffror (0-F). Man bryter helt enkelt isär det hexdecimala talet, och tar det decimala värdet från varje enskild siffra och räknar om det till binär form. Här är ett litet exempel med talet 4D.

4D bryts isär till "4" och "D".

4 har som bekant värdet 4 även i decimal form, och "D" har värdet 13 (kan utläsas av räknandet ovan).

4 har värdet 0100 i binär form.

13 (D) har värdet 1101.

4D har alltså det binära värdet 01001101, dvs [0100][1101].


Av det förstår vi nu att en hexdecimal är värd en byte (8 bit) och kan som högst vara 11111111, dvs 256. 1111 1111 blir ju dessutom 15 15 i decimal form, och 16x16 (0 > 15 blir 16 siffror) är lika med 256.

Binärt:
0000 0000 = 0 (decimalt)
1111 1111 = 256 (decimalt)
0000 0000 = 00 (hexdecimal)
1111 1111 = FF (hexdecimal)

Decimalt:
0 = 0000 0000 (binärt)
256 = 1111 1111 (binärt)
0 = 00 (hexdecimalt)
256 = FF (hexdecimalt)

Hexdecimalt:
00 = 0 (decimalt)
FF = 256 (decimalt)
00= 0000 0000 (binärt)
FF = 1111 1111 (binärt)


Frågor? Forumet står alltid öppet.

Externa dokument:

Hexadecimals -Basics of bases
Hexadecimal Explained
Number Bases

Översättare sökes:

Resurser