Sekstentallsystemet, bedre kjent somdet heksadesimale tallsystemet, forkortethex, er ettallsystem medgrunntall eller base 16. Navnet «heksadesimal» er en hybrid sammensatt av detgreskehexa (έξι (exi)) for «seks» ogdecimal fra detlatinske ordet for «ti».
Tallsystemet har 16 ulike siffer: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E og F. Det tallsystemet vi bruker til vanlig kallestitallsystemet eller detdesimale system. De heksadesimale sifrene A, B, C, D, E og F representerer titallsystemets verdier 10, 11, 12, 13, 14 og 15.
Når det er tale om uliketallsystemer, bruker matematikeregrunntallet (tallbasen) i senket skrift (subskript) etter tallet. Forrige setning kan da skrives slik: A16 = 1010, B16 = 1110, C16 = 1210, D16 = 1310, E16 = 1410, F16 = 1510. Grunntallet kan eventuelt skrives med bokstaver, på denne formen: Ahex = 10dec.
De første 32 positive heltallene skrives på følgende måte:
| Titallsystemet (n10) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |
|---|
| Sekstentallsystemet (n8) | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 1A | 1B | 1C | 1D | 1E | 1F | 20 |
|---|
Det heksadesimale tallsystemet er meget nyttig i arbeid meddatamaskiner. Årsaken er at det er nært forbundet medtotallsystemet, bedre kjent som detbinære tallsystemet, som datamaskiner er basert på. Sammenhengen er slik: Siden 16 = 24, kan ethvertfiresifret binært tall skrives som etensifret heksadesimalt tall og omvendt. Firebit (fire binære siffer) kan altså uttrykkes ved ett enkelt heksadesimalt siffer. (Se tabellen nedenfor.) Enbyte som består av 8 bit kan da kompakt angis med et tosifret heksadesimalt tall. Dette er en stor fordel for mennesker, som leser for eksempel «B4» mye lettere enn byten «10110100».
Tabellen nedenfor viser titallsystemets verdier 0–15 uttrykt i henholdsvis sekstentall-, titall-, åttetall- og totallsystemet.
| | | | | | | | | | | |
| 0hex | = | 0dec | = | 0oct | | 0 | 0 | 0 | 0 | |
| 1hex | = | 1dec | = | 1oct | | 0 | 0 | 0 | 1 | |
| 2hex | = | 2dec | = | 2oct | | 0 | 0 | 1 | 0 | |
| 3hex | = | 3dec | = | 3oct | | 0 | 0 | 1 | 1 | |
| | | | | | | | | | | |
| 4hex | = | 4dec | = | 4oct | | 0 | 1 | 0 | 0 | |
| 5hex | = | 5dec | = | 5oct | | 0 | 1 | 0 | 1 | |
| 6hex | = | 6dec | = | 6oct | | 0 | 1 | 1 | 0 | |
| 7hex | = | 7dec | = | 7oct | | 0 | 1 | 1 | 1 | |
| | | | | | | | | | | |
| 8hex | = | 8dec | = | 10oct | | 1 | 0 | 0 | 0 | |
| 9hex | = | 9dec | = | 11oct | | 1 | 0 | 0 | 1 | |
| Ahex | = | 10dec | = | 12oct | | 1 | 0 | 1 | 0 | |
| Bhex | = | 11dec | = | 13oct | | 1 | 0 | 1 | 1 | |
| | | | | | | | | | | |
| Chex | = | 12dec | = | 14oct | | 1 | 1 | 0 | 0 | |
| Dhex | = | 13dec | = | 15oct | | 1 | 1 | 0 | 1 | |
| Ehex | = | 14dec | = | 16oct | | 1 | 1 | 1 | 0 | |
| Fhex | = | 15dec | = | 17oct | | 1 | 1 | 1 | 1 | |
| | | | | | | | | | | |
Vi vet fra vanlig titallsmatematikk at et flersifret tall, for eksempel 273, har følgende betydning:
27310 = 2·102 + 7·101 + 3·100 = 200 + 70 + 3 = 273
Når man skal regne om (konvertere) et tall fra heksadesimalt til desimalt går man ut fra samme prinsipp: siffer nr. 1 bakfra skal multipliseres med grunntallet i nullte potens (160=1), siffer nr. 2 med grunntallet i første potens (161=16) osv. Å konvertere det heksadesimale 2D4 til desimalt blir da slik:
2D416 = (2·162 + 13·161 + 4·160)10 = 51210 + 20810 + 410 = 72410
For å konvertere et tall fra titallsystemet til sekstentallsystemet må man gjentatte ganger utføreheltallsdivisjon med grunntallet 16 og merke seg resten, som vist i eksempelet med tallet 724 nedenfor:
| Heltalldivisjon | Rest |
|---|
| 724/16 = 45 | 4 |
| 45/16 = 2 | 13 = D16 |
| 2/16 = 0 | 2 |
| ↑ |
Så begynner man med restene nedenfra. Tallet 724 blir dermed 2D416 i sekstentallsystemet.
Det er mange måter å betegne heksadesimale tall i ulikeprogrammeringsspråk:
- Ada og VHDL omslutter heksadesimale tall med «numeriske tegn», f.eks. «16#5A3#». (Merk: Ada godtar denne notasjonen foralle tallsystemer fra 2 til 16, for bådeheltall (integer) ogflyttall.)
- C,C++ og andre språk med tilsvarende syntaks (sånn somJava) prefikser heksadesimale tall med «0x», f.eks. «0x5A3». 0-tallet i startet blir brukt fordi tall må starte med et numerisk tegn, og «x» står for heksadesimal.
- Pascal og noenAssembler-kompilatorer indikerer heksadesimaler med en tilføyd «h» (hvis noen av tallene starter med en bokstav, så tilføyer man også «0» i starten), f.eks. «0A3Ch», «5A3h».
- Andre assembler-kompilatorer (AT&T,Motorola) og noen versjoner avBASIC bruker prefikset «$», f.eks. «$5A3».
- Noen versjoner avBASIC prefikserer heksadesimale tall med «&h», f.eks. «&h5A3».
- ActionScript, programmeringsspråket tilAdobe Flash, omtaler heksadesimale tall med 0x, eks. 0xFFFFFF.
Det finnes ingen enighet om en felles notasjonsstandard, så alle konvensjonene over er i bruk, noen ganger også i samme fremstillng. Forøvrig, siden det er få andre bruksområder for disse, byr dette på lite problemer.
Sekstentallsystemet er bra til å lage brøker med (begge sider heksadesimaltallsuttrykk):
- 1/2 = 0,8
- 1/3 = 0,5555...
- 1/4 = 0,4
- 1/5 = 0,3333...
- 1/6 = 0,2AAAA...
- 1/8 = 0,2
- 1/A = 0,19999...
- 1/C = 0,15555...
- 1/F = 0,1111...
Forditallbasen er kvadratisk, danner heksadesimaler oftere uløselige brøker enn titallsystemet. Repeterende desimaler oppstår når nevneren har enprimfaktor som ikke finnes i telleren. I sammenheng med heksadesimale tall, gjelder dette hvis og bare hvis nevneren ikke er en toer-potens.
Setallsystemer for en oversikt over systemer med andre tallbaser.