# Hexadecimaal talstelsel

Het hexadecimale talstelsel is een talstelsel met het grondtal 16. Het is een positiestelsel waarin niet, zoals gebruikelijk in het tientallige stelsel, met tien cijfers wordt gewerkt, maar met zestien cijfers. Hexadecimaal betekent letterlijk zestientallig. De cijfers 0 t/m 9 worden daarom uitgebreid met 'A' (=10) t/m 'F' (=15), ook wel 'a' t/m 'f'. In deze context fungeren deze letters dus als cijfers. In de computerwereld wordt de hexadecimale voorstelling van getallen veel gebruikt, omdat deze manier van representeren goed aansluit bij de binaire representatie in de computer.
Het woord 'hexadecimaal' wordt vaak afgekort als 'hex', hoewel dit 'zes' betekent.
In het hexadecimale talstelsel komt iedere positie overeen met een macht van 16. Een hexadecimaal getal $H$ wordt voorgesteld door een rij cijfers :
    $H=h_{n}h_{n-1}\ldots h_{2}h_{1}h_{0}$
waarin $h_{i}\in \{0,1,\ldots ,9,A,\ldots ,F\}$
met de betekenis:
    $H=h_{n}16^{n}+h_{n-1}16^{n-1}+\ldots +h_{2}16^{2}+h_{1}16+h_{0}$
In het hexadecimale talstelsel is bijvoorbeeld het getal ABC de voorstelling van het getal 2748 (= 10×256 + 11×16 + 12) in het decimale stelsel.

## Codering

Met een binair getal van vier bits kunnen de getallen 0 t/m 15 worden weergegeven, dus juist een hexadecimaal getal bestaande uit één (hexadecimaal) cijfer. Door steeds groepen van vier opeenvolgende bits in een binair getal als een hexadecimaal cijfer te schrijven ontstaat een hexadecimaal getal, dat voor ons overzichtelijker is dan de rij 0-en en 1-en. De rij 11000101011000100101110101110010 bijvoorbeeld is voor mensen praktisch onleesbaar. Daarom worden de cijfers in groepjes van vier (nibbles) gegroepeerd. Dat wordt dan 1100-0101-0110-0010-0101-1101-0111-0010. Ieder viertal wordt vervolgens in een hexadecimaal cijfer omgezet: C5625D72. Dit is veel overzichtelijker.

## Notatie

| hex | dec | oct | bin |
| 00 | 0 | 000 | 0000 0000 |
| 01 | 1 | 001 | 0000 0001 |
| 02 | 2 | 002 | 0000 0010 |
| 03 | 3 | 003 | 0000 0011 |
| 04 | 4 | 004 | 0000 0100 |
| 05 | 5 | 005 | 0000 0101 |
| 06 | 6 | 006 | 0000 0110 |
| 07 | 7 | 007 | 0000 0111 |
| 08 | 8 | 010 | 0000 1000 |
| 09 | 9 | 011 | 0000 1001 |
| 0A | 10 | 012 | 0000 1010 |
| 0B | 11 | 013 | 0000 1011 |
| 0C | 12 | 014 | 0000 1100 |
| 0D | 13 | 015 | 0000 1101 |
| 0E | 14 | 016 | 0000 1110 |
| 0F | 15 | 017 | 0000 1111 |
| 10 | 16 | 020 | 0001 0000 |
| 11 | 17 | 021 | 0001 0001 |
| 64 | 100 | 144 | 0110 0100 |
| FF | 255 | 377 | 1111 1111 |
| 100 | 256 | 400 | 1 0000 0000 |
Om duidelijk te maken dat men een hexadecimale waarde bedoelt, worden vaak enkele tekens toegevoegd. De hexadecimale getallen 35 en EB kunnen geschreven worden als '35x', '35h' en '0x35', respectievelijk 'EBx', 'EBh' en '0xEB'.
Bovendien geldt in bijna elke programmeertaal de eis dat een waarde met een 'echt' cijfer begint (dus niet met A-F). Zou men in een programmeertaal '35' schrijven, dan wordt dat decimaal opgevat. Daarom wordt daar van de drie genoemde notaties de derde gebruikt, dus met het voorvoegsel '0x'.
Enkele (on)mogelijkheden:
* Het genoemde formaat 0xABCD
* ABCDh (begint met een letter, niet mogelijk in veel programmeertalen)
* 0ABCDh (door een nul toe te voegen wordt dat probleem verholpen)
* $ABCD
* x'ABCD'

### Voorloopnullen

Omdat men bij een binaire notatie de status van iedere bit duidelijk wil maken, worden binaire getallen getoond in een formaat met voorloopnullen. Bij hexadecimale notaties zijn voorloopnullen ook heel gebruikelijk. Het gaat hier dan om een code die minder duidelijk zou worden indien er geen nullen aan voorafgaan.

## Toepassing van het hexadecimale stelsel

Het hexadecimale stelsel wordt vrijwel alleen gebruikt door degenen die op laag niveau met computers werken. Dit is een gevolg van de binaire (tweetallige) werking van de computer en de opbouw en werking van de geheugens in de computer. Door de toepassing van hogere programmeertalen is kennis van het hexadecimale stelsel meestal geen directe noodzaak meer.
Het hexadecimale stelsel wordt onder andere gebruikt voor:
   * het aanduiden van kleuren in HTML als RGB-waarde. Zo is FFFFFF de waarde voor wit, en 000000 de waarde voor zwart.
   ** 1e byte FF 00 00 is R is Rood. (#FF0000)
   ** 2e byte 00 FF 00 is G is Groen. (#00FF00)
   ** 3e byte 00 00 FF is B is Blauw. (#0000FF)
   * het weergeven van een MAC-adres zoals 00:0C:6E:D2:11:E6
   * het weergeven van een IP-adres (IPv6).
   * het bekijken van binaire bestanden (in hex-editors)