ICT Basis
Doorheen de 3 informaticavakken (ICT, Netwerken en Embedded Systems) komen bepaalde items veelvuldig voor en zijn absolute basiskennis binnen de ICT wereld. Daaronder vallen bijvoorbeeld het verschil tussen analoge en digitale data, representatievormen en andere. Daarom gaan we in het allereerste hoofdstuk deze principes uit de doeken doen zodat dit alvast duidelijk is voor alle vervolgstappen.
Talstelsels
Velen onder jullie weten misschien al uit ervaring, en uit de eerdere schoolloopbaan, dat data op vandaag meestal digitaal verstuurd wordt. Maar wat is dat 'digitaal' nu eigenlijk? Wel, voordat we daar een sluitend antwoord op kunnen geven moeten we eerst de zogenaamde talstelsels even van dichterbij bekijken.
Decimaal
Laten we alvast even het talstelsel bekijken dat we allen op vandaag gebruiken. Het tiendelig talstelsel, of decimaal talstelsel, wat iedereen in het dagelijkse leven gebruikt bestaat uit 10 verschillende getallen, namelijk 0, 1, 2, 3, 4, 5, 6, 7, 8 en 9. Let er dus op dat het getal 10 niet voorkomt in het decimaal talstelsel en is een combinatie van een '1' bij de tientallen en een '0' bij de eenheden. Dat gezegd zijnde bestaan er ook hondertallen, duizendtallen, tienduizendtallen, enzovoort. Hetzelfde gebeurt trouwens na de komma.


Nu, waarom is dit zo? Heb je dit jezelf ooit al eens afgevraagd? Het tiendelig talstelsel heeft als grondgetal 10. Om te weten welke waarde aan elke kolom gekoppeld wordt moet je telkens het grondtal verheffen tot de macht, en die macht is het nummer van de kolom. Starten doen we helemaal rechts met de macht 0. 100 = 1 of eenheid (alle grondtallen verheffen tot de nulde is trouwens 1). Daarna hebben we 101, wat resulteert in tientallen, gevolgd door 102 of 10 * 10 of 100 of hondertallen, 103 of 10 * 10 * 10 of 1000 of duizendtallen, enzovoort.
Wanneer we dus een getal hebben, bv. 3265, dan heb je 3 keer 103 (3000), 2 keer 102 (200), 6 keer 101 (60) en 5 keer 100 (5). Tel deze 4 getallen op 3000 + 200 + 60 + 5 en je begrijpt ondertussen wel hoe we 3265 zien.

Binair
Het zou gemakkelijk zijn als een computer decimaal kon verwerken, dan was nu de kous af. Jammer genoeg bestaan er geen elektronische oplossingen om een materiaal 10 verschillende statussen te geven. Veelal gaat het eerder om materialen, of piepkleine devices (transistoren), die slechts 2 statussen kunnen aangeven. Ja of nee, true of false, geslaagd of niet geslaagd, ... Bij de magnetische harde schijven werd duidelijk dat een magnetisch veld in een bepaalde richting stond, of omgekeerd, en dat de Γ©ne richting gelijk stond aan een digitale '1' en de andere richting aan een digitale '0'. En daar stopt het, geen extra mogelijkheden.
Bij het tweedelig talstelsel bestaat het getal '2' niet waardoor je enkel de getallen 0 en 1 kan tegenkomen (vergelijk decimaal 10 en 0-9). Hoe telt men nu in het tweedelig talstelsel? Wel, exact hetzelfde, wanneer men aan het getal 1 komt en er 1 bijtelt moet er dus een extra kolom aangemaakt worden en wordt het getal '2' (decimaal) dus gelijk aan het getal 10 binair. Het getal '3' (decimaal) wordt nu dus 11 en het getal '4' (decimaal) wordt gelijk aan 100 (vergelijk met decimaal 99 naar 100).
Om even hetzelfde principe toe te passen op het grondtal 2, zoals we dit deden voor het grondtal 10, dan krijgen we het volgende:
- 20 = 1
- 21 = 2
- 22 = 4
- 23 = 8
- 24 = 16
- 25 = 32
- 26 = 64
- 27 = 128
- 28 = 256
- ...

En dan kan je gerust stellen, als we 100 binair nemen, dat daar 0 keer 20, 0 keer 21 en 1 keer 22 in zit. Vier dus. En dat klopt met wat we daarnet voorop gesteld hebben.
Hexadecimaal
Naast het binaire talstelsel zijn er bepaalde situaties binnen de computerwetenschappen waar gebruikgemaakt wordt van het hexadecimaal, of zestiendelig talstelsel. In dit talstelsel is zestien het grondtal en hebben we maximaal zestien getallen, zijnde: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F waarbij A gelijk is aan 10, B aan 11, C aan 12, enz. Op dezelfde manier als daarnet kunnen we een zestiendelig getal op volgende manier bekijken:
Waarbij, net zoals voorheen elke kolom het grondtal is verhoffen tot de correcte macht. 160 = 1, 161 = 16, 162 = 256, 164 = 4096, en daarna wordt het heel snel groter π.
Andere
In ICT gerelateerde toepassingen kan je soms nog wel eens het octaal talstelsel tegenkomen (grondtal 8), maar je kan elk getal eigenlijk als grondtal nemen. Voorbeelden kunnen zijn: het vijfdelig talstelsel (grondtal 5), het negendelig talstelsel (grondtal 9). Deze laatste worden naar mijn weten niet echt ergens gebruikt. Onderstaand zou dan voor een 9-delig talstelsel zijn.

Omzettingen
Aangezien we allemaal gewend zijn met het decimaal talstelsel te werken kan het natuurlijk handig zijn om die getallen in een ander talstelsel er ietwat normaal te doen uitzien. Want wie kan direct vertellen dat 11001100 uit het binair talstelsel gelijk staat aan 204 in het decimaal talstelsel? En dan gaat het nog over een 8-bit getal, wetende dat processoren op vandaag 64-bit getallen gebruiken...
Misschien eerst en vooral even aangeven, als we omzettingen gaan doen, dat we best bij het startgetal aangeven in welk grondtal we werken. Zo zal je bijvoorbeeld volgende notaties tegenkomen: 1000012 of 100001B (Binair), A26H (Hexadecimaal) of A2616, 84D (Decimal) of 8410, 848 of 84O (Octaal). Maar ook 1000016 kan evenwel voorkomen. Let dus goed op deze aanduiding.
Naar decimaal
Omzetten vanuit gelijk welk talstelsel naar het decimaal talstelsel werkt altijd op dezelfde manier, en die manier hebben we daarnet eigenlijk al aangehaald. Bereken per kolom de waarde in het bijhorende talstelsel, vermenigvuldig met het getal in die kolom en tel alles op.
π Voorbeeld 1 - Binair naar decimaal

π Voorbeeld 2 - Hexadecimaal naar decimaal

Van decimaal
De andere richting, van decimaal naar gelijk welk ander talstelsel is iets lastiger. Eigenlijk moeten we hier op zoek naar hoeveel keer het nieuwe grondtal (2, 8, 16, etc.) past in het originele decimale getal.
Daar is ook een truukje voor en gaat als volgt. Deel het getal door het nieuwe grondgetal. Rond je resultaat af naar het gehele getal dat kleiner is dan je uitkomst. Vermenigvuldig vervolgens dat gehele getal met het nieuwe grondtal en breng dit resultaat in vermindering van je originele getal. Wat je overhoudt is een restgetal. Dit getal komt in de rechtse kolom van het getal in het nieuwe grondtal.
Neem vervolgens het gehele getal van daarnet en deel dit opnieuw door je nieuwe grondtal. Rond het resultaat opnieuw af naar beneden (geheel getal). Vermenigvuldig opnieuw en breng in mindering. Het restgetal zet je nu in kolom 2 (links van het vorige restgetal). Herhaal deze stappen totdat het gehele getal na deling 0 geworden is.
Maar zo'n beschrijving is niet altijd even eenvoudig. Daarom enkele voorbeelden:
π Voorbeeld 1 - Decimaal naar binair

156 / 2 = 78, 156 - (78 * 2) = 0 eerste restgetal
78 / 2 = 39, 78 - (39 * 2) = 0 tweede restgetal
39 / 2 = 19.5 -> 19 (gehele getal kleiner dan 19.5), 39 - (19 * 2) = 1 derde restgetal
19 / 2 = 9.5 -> 9, 19 - (9 * 2) = 1 vierde restgetal
9 / 2 = 4.5 -> 4, 9 - (4 * 2) = 1 vijfde restgetal
4 / 2 = 2, 4 - (2 * 2) = 0 zesde restgetal
2 / 2 = 1, 2 - (2 * 1) = 0 zevende restgetal
1 / 2 = 0,5 -> 0 (hier nog uitrekenen en dan stoppen), 1 - (0 * 2) = 1 achtste restgetal
dus, 156D wordt (lees van onder naar boven) 10011100B
π Voorbeeld 2 - Decimaal naar hexadecimaal

721 / 16 = 45.0625 -> 45, 721 - (45 * 16) = 1 eerste restgetal
45 / 16 = 2.8125 -> 2, 45 - (2 * 16) = 13 tweede restgetal
2 / 16 = 0.125 -> 0 (hier nog uitrekenen en dan stoppen), 2 - (0 * 16) = 2 derde restgetal
dus, 721D wordt (lees van onder naar boven) 2D1H
Andere
Zoals later uit de 'Use Cases' zal blijken kan het ook handig zijn om rechtstreeks een omvorming te doen van hexadecimaal naar binair en omgekeerd. In een normale denkwijze zou je eerst omvormen van binair naar decimaal, en dan van decimaal naar hexadecimaal. Gelukkig kan dit ook korter, en dat komt omdat zestien een veelvoud is van twee. Heel simpel gezegd, x aantal keer 2 gaat in 16, dus een rechtstreekse omvorming van het hexadecimale getal in 4 bits (of omgekeerd) kan en mag en zal altijd correct zijn.
Hexadecimale omzetting in binair kan je onderstaande tabel voor raadplegen:

π Voorbeeld 1 - Hexadecimaal naar binair

π Voorbeeld 2 - Binair naar hexadecimaal

Use cases
Voorbeelden waar binaire getallen in computertechnieken gebruikt worden zijn legio. Alle mediadragers slaan hun informatie binair op ('0' of '1'). Binnen programmeren bestaat er een boolean variabele, deze kan de status 'waar' ('true') en 'onwaar' ('false') zijn, ofte '1' en '0'.
if (first == true) // Read "If first is true."
{
do this
}
Een andere plaats waar we een binaire naar decimale omzetting zien, dat zijn IP adressen. De volledige toedracht hierbij is voor de vervolgcursus 'Computernetwerken', maar laten we alvast beginnen met te vertellen dat een IP adres een 32 bit getal is. Die 32 bits worden opgesplitst in 4 bytes (ofte 4 x 8 bits). Om alles voor de gebruiker wat leesbaarder te maken gaat men elke 8 bit voorstellen met behulp van een decimaal getal.

Om even in dezelfde lijn te blijven van gebruikstoepassingen van hexadecimale talstelsels kunnen we MAC adressen aanhalen (ook hierover meer in de vervolgcursus). Een MAC adres is 48 bits lang, en wordt opgesplitst in 12 'nibbles' (ofte 12 x 4 bits). Elke 4 bits kunnen we zoals jullie ondertussen weten omvormen in een hexadecimaal getal. Een MAC adres wordt dus leesbaar gemaakt door twaalf hexadecimale getallen.

Een laatste voorbeeld is de de manier waarop webdesigners kleuren op een website samenstellen. Ze maken namelijk gebruik van hexadecimale codes om de kleuren digitaal voor te stellen. Ondertussen weten jullie (uit het hardwaregedeelte) dat kleur een combinatie is van een stukje rood, groen en blauw. Binnen de kleurruimte van de computer kunnen we de hoeveelheid kleur uitdrukken in waarden van 0 tot en met 255 en raad maar eens met wat FF (hexadecimaal) overeenkomt!?
Binnen de wereld van programmeurs en ontwerpers worden kleuren voorgesteld (rood, groen en blauw gecombineerd) als een getal van 6 hexadecimale cijfers. Enkele voorbeelden:

Handig om weten is dat elk deelkleur uitgedrukt kan worden als 8 bits of 1 byte. Zo vormt een volledig kleur exact 3 byte (of 24 bits) aan data. Voorbeeld van een HTML code (waarmee webpagina's gemaakt worden) waar een kleuren toegekend word aan verschillende elementen op de webpagina.

Met als uiteindelijke resultaat (in de webbrowser):

Analoog vs Digitaal
Als we het hebben over analoge data dan hebben we het voornamelijk over continue data. Dat wil zeggen dat elk gegeven punt in de tijd een heel precieze waarde kan hebben. Hou wel rekening dat deze waarde zich tussen twee eindpunten zal bevinden.
Laten we als voorbeeld een elektrisch signaal nemen tussen 0V en 5V. Dan zal op elk gegeven punt in de tijd de gemeten waarde daartussen liggen, maar die kan ook immens precies opgevraagd worden. Zo kunnen we gerust 2.36548788...V gaan meten. Een fractie van een seconde later kan dat dan bijvoorbeeld 2.36549876...V zijn. Let erop dat we hier gerust meer dan acht cijfers na de komma zouden kunnen plaatsen ook.

Het grote verschil met digitale data is dat we daar werken met discrete waarden. We delen onze volledige range (0-5V) op in kleinere stukjes en gaan dan onze analoge waarde gaan omvormen (mappen) in de digitale waarde die er het dichtste bij zit. Op de afbeelding hierboven kunnen ze goed wien dat we nu stapsgewijs werken in plaats van continue.
Om de digitale waarde te bepalen waar de analoge waarde het dichtste bijligt spreken we over de 'resolutie'. Hoe hoger de resolutie, hoe meer stapjes we kunnnen nemen. Dit hangt nauw samen met ons binaire talstelsel van daarnet. Binnen ICT spreekt men meestal over een aantal bits die gebruikt worden om een getal voor te stellen. Als we één bit nemen, dan kunnen we binair 0 en 1 representeren. Of in bovenstaand geval 0V en 5V (0 en 1). Maar dan is 2.50000001V ook gelijk aan een digitale 1, net zoals 4.99999999V dat is. Je begrijpt vast wel dat we het aantal bits wat omhoog moeten (resolutie verhogen) doen om een betere representatie van onze analoge data te bekomen.
Als we twee bits gaan nemen dan kunnen we onze data voorstellen met 00, 01, 10 en 11 (alle combinaties die je met 2 bits kan maken, of 22, of 4). Dan kunnen we stappen van 1.25V nemen (0V, 1.67V, 3.33V en 5V). Als we nog wat opdrijven naar 4 bits dan krijgen we 24 of 16 mogelijke combinaties. Daardoor kunnen we (5/15) 0,33V per stap nemen waardoor onze data toch wat specifieker wordt. Dan zal de 2.5V van daarnet uitkomen op 2.64V (of 1000) en 4.99V uitkomen op 5V (of 1111).
Een goed voorbeeld kan je in onderstaande afbeelding vinden.

Daarbij is de groene lijn de omvormer met de laagste resolutie en de blauwe lijn met de hoogste resolutie. Daarbij zie je heel duidelijk dat we het analoge signaal veel preciezer kunnen benaderen. Enige nadeel is meestal dat een betere analoog naar digitaal omzetter, ook een hogere kostprijs zal hebben. Er moet dus gekeken worden naar de toepassing om een juiste keuze te maken inzake resolutie.
Sampling Rate
Naast resolutie moeten we het ook nog even hebben sampling rate. Bekijken we eerst even onderstaande afbeelding:

Sampling rate is eigenlijk de frequentie waarmee we een analoog signaal omvormen in een digitaal equivalent. Daarbij zie je dat hoe meer samples we nemen, hoe beter we het originele analoge signaal digitaal kunnen weergeven. Afhankelijk van de maximale frequentie moet er dus een bijpassende sampling rate gekozen worden. Laten we als voorbeeld audiosignalen nemen. De hoorbare frequenties van het menselijk oor vallen tussen 0 Hz en 22 kHz. Om een goede sampling te doen gebruikt men veelal de stelregel dat fsampling = 2 * fsignal waarbij we voor audio dus minstens 44 kHz sampling frequentie dienen te gebruiken om het audiosignaal digitaal om te vormen.
Onlosmakelijk is ook hiermee weer iets verbonden. Elke sample is een digitale waarde, maar die neemt ook plaats in (op je mediadrager, zie verder). Dus afhankelijk van je resolutie (16 bit of 24 bit zijn courante resoluties) zal je totale data dus groter of kleiner zijn. Wanneer je bijvoorbeeld een 44 kHz 16 bit digitaal signaal gaat maken van een geluidsfragment van pakweg 100 seconden, dan bekom je 44000 * 16 * 100 = 70.400.000 bits of 70,4 Mb (Megabit) of 8,8 MB (MegaByte). Wanneer je een 24 bit resolutie gebruikt bekom je respectievelijk voor datzelfde fragment 44000 * 24 * 100 = 105.600.000 bits of 105,6 Mb of 13,2 MB. En ook dit heeft allemaal invloed op de uiteindelijke keuze om een bepaalde sampling rate en resolutie voor een bepaalde toepassing te gaan kiezen.
