Den største ulempe ved binære tal er, at den binære streng, der svarer til et stort decimaltal i base-10, kan være ret lang.
Når man arbejder med store digitale systemer, som f.eks. computere, er det almindeligt at finde binære tal, der består af 8, 16 og endda 32 cifre, hvilket gør det vanskeligt både at læse og skrive uden at producere fejl, især når man arbejder med mange 16- eller 32-bit binære tal.
En almindelig måde at overkomme dette problem på er at inddele de binære tal i grupper eller sæt af fire bits (4-bits). Disse grupper af 4-bits bruger en anden type nummereringssystem, der også er almindeligt anvendt i computer- og digitale systemer, kaldet hexadecimaltal.
Hexadecimal talstreng
Det “hexadecimale” eller blot “hex” nummereringssystem bruger base 16-systemet og er et populært valg til at repræsentere lange binære værdier, fordi deres format er ret kompakt og meget nemmere at forstå sammenlignet med de lange binære strenge af 1’er og 0’er.
Som et Base-16-system anvender det hexadecimale talsystem derfor 16 (seksten) forskellige cifre med en kombination af tal fra 0 til 15. Der er med andre ord 16 mulige cifresymboler.
Der er imidlertid et potentielt problem ved at bruge denne metode til ciffernotering, som skyldes, at decimaltallene 10, 11, 12, 13, 14 og 15 normalt skrives med to tilstødende symboler. Hvis vi f.eks. skriver 10 i hexadecimaltal, mener vi så det decimale tal 10 eller det binære tal på to (1 + 0). For at komme uden om dette vanskelige problem kan vi bruge hexadecimaltal, der angiver værdierne ti, elleve, . . . , femten erstattes med de store bogstaver A, B, C, D, E og F.
Så bruger vi i det hexadecimale talsystem tallene fra 0 til 9 og de store bogstaver A til F til at repræsentere det tilsvarende binære eller decimale tal, idet vi starter med det mindst betydende ciffer i højre side.
Som vi netop har sagt, kan binære strenge være ret lange og vanskelige at læse, men vi kan gøre livet lettere ved at dele disse store binære tal op i lige store grupper, så de bliver meget lettere at skrive ned og forstå. F.eks. er følgende gruppe af binære tal 1101 0101 0101 1100 11112 meget lettere at læse og forstå end 110101010101110011112, når de alle er samlet sammen.
I daglig brug af det decimale talsystem bruger vi grupper af tre cifre eller 000’er fra højre side for at gøre et meget stort tal som f.eks. en million eller en billion lettere for os at forstå, og det samme gælder også i digitale systemer.
Hexadecimaltal er et mere komplekst system end blot at bruge binære eller decimale tal, og det bruges hovedsageligt, når man har med computere og hukommelsesadressepladser at gøre. Ved at dele et binært tal op i grupper af 4 bits kan hver gruppe eller sæt af 4 cifre nu have en mulig værdi på mellem “0000” (0) og “1111” ( 8+4+2+1 = 15 ), hvilket giver i alt 16 forskellige talkombinationer fra 0 til 15. Glem ikke, at “0” også er et gyldigt ciffer.
Vi husker fra vores første vejledning om binære tal, at en 4-bit gruppe af cifre kaldes en “nibble”, og da der også kræves 4-bits for at frembringe et hexadecimalt tal, kan et hex-ciffer også betragtes som en nibble eller en halv byte. Så der kræves to hexadecimale tal for at producere en hel byte, der spænder fra 00 til FF.
Da 16 i decimalsystemet desuden er den fjerde potens af 2 ( eller 24 ), er der en direkte sammenhæng mellem tallene 2 og 16, så et hex-ciffer har en værdi svarende til fire binære cifre, så nu er q lig med “16”.
På grund af denne sammenhæng kan fire cifre i et binært tal repræsenteres med et enkelt hexadecimalt ciffer. Dette gør konverteringen mellem binære og hexadecimale tal meget let, og hexadecimaltal kan bruges til at skrive store binære tal med langt færre cifre.
Tallene 0 til 9 bruges stadig som i det oprindelige decimalsystem, men tallene fra 10 til 15 repræsenteres nu af store bogstaver i alfabetet fra A til F inklusive, og forholdet mellem decimaltal, binærtal og hexadecimaltal er angivet nedenfor.
Hexadecimaltal
Decimaltal | 4-bit Binært tal | Hexadecimalt tal | |
0 | 0000 | 0 | |
1 | 0001 | 1 | |
2 | 0010 | 2 | |
3 | 0011 | 3 | |
4 | 0100 | 4 | |
5 | 0101 | 5 | |
6 | 0110 | 6 | |
7 | 0111 | 7 | |
8 | 1000 | 8 | |
9 | 1001 | 9 | |
10 | 1010 | A | |
11 | 1011 | B | |
12 | 1100 | C | |
13 | 1101 | D | |
14 | 14 | 1110 | E |
15 | 111111 | F | F |
16 | 0001 0000 | 10 (1+0) | |
17 | 0001 0001 | 11 (1+1) | |
Fortsætter opad i grupper af fire |
Med det oprindelige binære tal fra ovenfor 1101 0101 1100 11112 kan dette nu omdannes til et tilsvarende hexadecimalt tal D5CF, som er meget lettere at læse og forstå end en lang række af 1’er og 0’er, som vi havde før.
Så ved at bruge hexadecimal notation kan digitale tal skrives med færre cifre og med en langt mindre sandsynlighed for, at der opstår en fejl. På samme måde er konvertering af hexadecimale baserede tal tilbage til binære tal blot den omvendte operation.
Så er de vigtigste karakteristika ved et hexadecimalt talsystem, at der er 16 forskellige tællende cifre fra 0 til F, hvor hvert ciffer har en vægt eller værdi på 16 med udgangspunkt i den mindst betydende bit (LSB). For at skelne hexadecimale tal fra denary-tal anvendes et præfiks bestående af enten et “#”, (Hash) eller et “$” (dollartegn) før den faktiske hexadecimale talværdi, #D5CF eller $D5CF.
Da basen i et hexadecimalt system er 16, som også repræsenterer antallet af individuelle symboler, der anvendes i systemet, anvendes subscript 16 til at identificere et tal udtrykt i hexadecimalt format. F.eks. udtrykkes det foregående hexadecimaltal som: D5CF16
Tælling ved hjælp af hexadecimaltal
Så vi ved nu, hvordan man omdanner 4 binære cifre til et hexadecimaltal. Men hvad nu hvis vi havde mere end 4 binære cifre, hvordan ville vi så tælle i hexadecimaltal ud over det sidste bogstav F. Det enkle svar er at starte forfra med et andet sæt af 4 bits på følgende måde.
0…til…9, A,B,C,D,E,F, 10…til…19, 1A, 1B, 1C, 1D, 1E, 1F, 20, 21….etc
Lad dig ikke forvirre, 10 eller 20 er IKKE ti eller tyve, det er 1 + 0 og 2 + 0 i hexadecimaltal. Faktisk eksisterer tyve ikke engang i hex. Med to hexadecimaltal kan vi tælle op til FF, som er lig med decimaltallet 255. For at tælle højere end FF skal vi ligeledes tilføje et tredje hexadecimalt tal til venstre, så det første 3-bit hexadecimale tal bliver 10016 (25610) og det sidste FFF16 (409510). Det maksimale 4-cifrede hexadecimale tal er FFFF16, som er lig med 65 535 i decimaltal osv.
Repræsentation af et hexadecimalt tal
MSB | Hexadecimalt tal | LSB | ||||||
168 | 167 | 166 | 165 | 164 | 163 | 162 | 161 | 160 |
4.3G | 2.6G | 16M | 1M | 65k | 4k | 256 | 16 | 1 |
Denne tilføjelse af yderligere hexadecimale cifre til at konvertere både decimale og binære tal til et hexadecimalt tal er meget let, hvis der er 4, 8, 12 eller 16 binære cifre, der skal konverteres. Men vi kan også tilføje nuller til venstre for den mest betydningsfulde bit, MSB, hvis antallet af binære bits ikke er et multiplum af fire.
For eksempel er 110010110110110012 et binært tal på fjorten bit, der er for stort til kun tre hexadecimale cifre, men for lille til et hexadecimalt tal på fire. Svaret er at tilføje yderligere nuller til den mest venstre bit, indtil vi har et komplet sæt af binære tal på fire bit eller multipla heraf.
Tilføjelse af yderligere 0’er til et binært tal
Binært tal | 0011 | 0010 | 1101 | 1001 | |
Hexadecimaltal | 3 | 2 | 2 | D | 9 |
Den største fordel ved et hexadecimalt tal er, at det er meget kompakt, og ved at bruge en base på 16 betyder det, at antallet af cifre, der bruges til at repræsentere et givet tal, normalt er mindre end i binært eller decimaltal. Det er også hurtigt og nemt at konvertere mellem hexadecimaltal og binære tal.
Hexadecimaltal Eksempel nr. 1
Konverter følgende binære tal 1110 10102 til dets hexadecimale talækvivalent.
Binært tal = 11101010102 | |||
Grupper bittene i firer begyndende fra højre side | |||
= | 1110 | 1010 | |
Find den decimale ækvivalent for hver enkelte gruppe | |||
= | 14 | 10 | (i decimaltal) |
Omregn til Hexadecimal ved hjælp af ovenstående tabel | |||
= | E | A | (i hex) |
Derefter, den hexadecimale ækvivalent til det binære tal
1110 10102 er #EA16 |
Hexadecimaltal Eksempel No2
Konverter det følgende hexadecimale tal #3FA716 til dets binære ækvivalent og også til dets decimale eller denære ækvivalent ved at bruge subscripts til at identificere hvert talsystem.
#3FA716
= 0011 1111 1010 01112
= (8192 + 4096 + 2048 + 1024 + 512 + 512 + 256 + 128 + 32 + 4 + 2 + 1)
= 16,29510
Det decimale tal på 16,295 kan derefter repræsenteres som:-
#3FA716 i hexadecimalt format
eller
0011 1111 1010 01112 i binært format.
Sammenfatning af hexadecimaltal
Så kan man opsummere. Det hexadecimale, eller hex-talsystem, anvendes almindeligvis i computer- og digitale systemer til at reducere store strenge af binære tal til et sæt af fire cifre, så vi let kan forstå dem. Ordet “hexadecimalt” betyder seksten, fordi denne type digitalt nummersystem anvender 16 forskellige cifre fra 0 til 9 og fra A til F.
Hexadecimale tal grupperer binære tal i sæt af fire cifre. For at konvertere en binær sekvens til et tilsvarende hexadecimalt tal skal vi først gruppere de binære cifre i et sæt af 4-bits. Disse binære sæt kan have en hvilken som helst værdi fra 010 ( 00002 ) til 1510 ( 11112 ), der repræsenterer den hexadecimale ækvivalent til 0 til F.
I den næste tutorial om binær logik vil vi se på konvertering af hele strenge af binære tal til et andet digitalt nummereringssystem kaldet oktal tal og omvendt.