Kapitel 2: 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".

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 1-15, skrivna i binär form:

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

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 gångrar 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 sytar 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

Men 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 ju bara att det inte finns tillräckligt med siffror i det decimala talsystemet. Av den anledningen lånar man några 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å.

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.

Hur sker då själva omvandlingen? 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.


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

Externa dokument:

Hexadecimals -Basics of bases
Hexadecimal Explained
Number Bases

Nästa kapitel blir om Thingy32.