Naar inhoud springen

Binair talstelsel

Uit Wikipedia, de vrije encyclopedie
(Doorverwezen vanaf Binair getal)
Getalsystemen

Binair Decimaal
00000 0
00001 1
00010 2
00011 3
00100 4
00101 5
00110 6
00111 7
01000 8
01001 9
01010 10

Het binaire talstelsel of tweetallig talstelsel is een positiestelsel, waarin een getal wordt voorgesteld door een rijtje van de cijfers 0 en 1. Een dergelijk cijfer wordt in deze context een bit ("binary digit") genoemd.

In het binaire talstelsel komt iedere positie overeen met een macht van 2. Een binair getal wordt voorgesteld door een rij met bits:

wat betekent:

In het binaire talstelsel is bijvoorbeeld het getal 0101 het getal 5 (= 0 + 4 + 0 + 1) in het decimale stelsel.

Bij geautomatiseerde opslag en communicatie van gegevens (zoals binnen en tussen computers in de ruime zin van het woord) worden deze meestal binair gecodeerd, dat wil zeggen als duizenden reeksen met bits. Voor betere leesbaarheid wordt zo'n reeks met bits vaak weergegeven in het hexadecimale of het octale talstelsel, die beide nauw verwant zijn met het binaire. Zie ook BCD-code, als een tussenvorm tussen het decimale talstelsel en het binaire talstelsel.

Het octale en hexadecimale stelsel worden door computerprogrammeurs gebruikt bij taken waarbij ze de bitconfiguratie van het getal willen zien, omdat er direct hardware aangesproken wordt. In de hardware bestaat informatie uitsluitend in de vorm van reeksen enen en nullen.

Octale en hexadecimale getallen zijn uit binaire getallen af te leiden, namelijk door de binaire cijfers in groepjes van 3 (octaal) of 4 (hexadecimaal) te verdelen en deze groepjes van 3 respectievelijk 4 binaire cijfers steeds tot één octaal respectievelijk hexadecimaal cijfer om te zetten. Dit principe geldt voor alle getallenstelsels waarvan het aantal cijfers een macht van twee is.

Diagram van Hexagrammen uit de I Tjing, bezit van Gottfried Wilhelm Leibniz, 1701.
Rechter halve cirkel, onder naar boven: 000000-011111,
links, onder naar boven: 100000-111111
centrum: linksboven naar rechtsonder: 000000-111111.
  • 1703: Gottfried Wilhelm Leibniz publiceerde zijn artikel 'Explication de l'Arithmétique Binaire' (uitleg over binair rekenen).
Rekenen met binaire getallen, door Gottfried Wilhelm Leibniz.
  • 1937: George Stibitz knultselde aan zijn keukentafel de eerste binaire rekenmachine in elkaar, de "model-K".
  • 1947: John Tukey noemde een binair cijfer een bit, een 'binary digit'.

Van binair naar decimaal

[bewerken | brontekst bewerken]

Om een binair getal te vertalen naar een decimaal getal, hoeft men slechts te kijken naar de posities waar een 1 staat. Voor ieder binair cijfer 1 berekent men de door de positie van dit cijfer aangegeven macht van twee, en wel: 2positie − 1. De som van de op deze wijze berekende reeks decimale getallen geeft de waarde van het binaire getal decimaal weer. De eerste positie is de meest rechtse en komt overeen met het getal 1. De tweede positie, de tweede van rechts, komt overeen met het getal 2, de derde van rechts met 4, enz.

Binair 2(positie van de 1) − 1 Decimaal Binair 2(positie van de 1) − 1 Decimaal
100000 25 32
010000 24 16 010000 24 16
001000 23 8
000100 22 4 000100 22 4
000010 21 2
000001 20 1 000001 20 1
111111 25+24+23+22+21+20 63 010101 24+22+20 21

Simpel gezegd: bereken voor elk cijfer 1 in het binaire getal, de overeenkomstige macht van 2. Een binair getal van 6 cijfers, bijvoorbeeld 111111, wordt vertaald in (van links naar rechts) 32, 16, 8, 4, 2 en 1. De som 32 + 16 + 8 + 4 + 2 + 1 = 63 is de decimale waarde van dit binaire getal. Zo heeft het binaire getal 010101 de decimale waarde 16 + 4 + 1 = 21

Voor cijfers achter de komma zijn de machten negatief.

Binair 2(positie van de 1) − 1 Decimaal Binair 2(positie van de 1) − 1 Decimaal
0,10000 2−1 0,50000
0,01000 2−2 0,25000 0,01000 2−2 0,2500
0,00100 2−3 0,12500
0,00010 2−4 0,06250 0,00010 2−4 0,0625
0,00001 2−5 0,03125
0,11111 2−1+2−2+2−3+2−4+2−5 0,96875 0,01010 2−2+2−4 0,3125

Eenvoudig omrekenen

[bewerken | brontekst bewerken]
In 256 128 64 32 16 8 4 2 1 Uit
001101010 0 0 1 1 0 1 0 1 0 =106
+64 +32 +8 +2
100010000 1 0 0 0 1 0 0 0 0 =272
+256 +16
57 −32 −16 −8 0 0 −1 =111001
1 1 1 0 0 1

Bovenstaande tabel is een eenvoudig hulpmiddel voor het omrekenen van binair naar tientallig en andersom. Stel er is het binaire getal 001101010. Vul dit in de tabel in en kijk naar de waarde in de bovenste rij. Bij het voorbeeld zijn dit de waarden 64, 32, 8 en 2. Door deze op te tellen is nu bekend hoeveel 001101010 in het tientalligstelsel is, namelijk 106. Het tweede voorbeeld - 100010000 - wordt dan 272.

Een andere methode gebruikt het hornerschema en bestaat erin de bijdragen van de machten van 2 van links naar rechts successievelijk te berekenen. Start bij de meest linkse "1" en pas het volgende algoritme toe. Vermenigvuldig met 2 en tel het volgende cijfer erbij op. Herhaal deze stap tot het laatste cijfer. Toegepast op het binaire getal 001101010 geeft dit:

        1=1
    2+1=3
    6+0=6
  12+1=13
  26+0=26
  52+1=53
106+0=106

Het binaire getal 001101010 = 106 (decimaal). Merk op dat het binaire getal verschijnt in de "kolom" voor de =-tekens.

Andersom kan de tabel ook gebruikt worden. Van het getal 57 wordt de binaire representatie gezocht. Zoek het grootste getal in de bovenste rij dat kleiner is dan of gelijk aan 57; dat is 32. Op die positie komt dus een 1. De rest is 57-32=25. Zoek weer het grootste getal in de bovenste rij dat kleiner is dan of gelijk aan 25; dat is 16. Op de positie 16 komt ook een 1. Bepaal weer de rest: 25-16=9. Het grootste getal in de bovenste rij dat kleiner is dan of gelijk aan 9 is 8. Zet een 1 op die positie. De test is 9-8=1. Ook daar komt een 1. Het resultaat is: 57=1110012.

Er is ook een methode die van laag naar hoog, dus van rechts naar links werkt. Schrijf een 1 als het getal oneven is en trek 1 van het getal af. Zet een 0 als het getal even is. Deel het resterende even getal door 2. Ga een positie naar links en herhaal de procedure.

Toegepast op 57 geeft dit het volgende.

  • 57 is oneven, dus rechts komt een 1.
  • Trek 1 af: 57−1=56 en deel 56 door 2; resterend 28. Schuif een plaats naar links en zet een 0 omdat 28 even is. De twee laatste cijfers van de binaire representatie zijn dus 01.
  • Deel 28 door 2: uitkomst 14. Ga weer een plaats naar links en zet een 0 omdat 14 even is. De drie laatste cijfers zijn dus 001.
  • Deel 14 door 2: uitkomst 7. Ga weer een plaats naar links en zet een 1 omdat 7 oneven is. De vier laatste cijfers zijn dus 1001.
  • Trek 1 af: 7−1=6 en deel 6 door 2; resterend 3. Schuif een plaats naar links en zet een 1 omdat 3 oneven is. De vijf laatste cijfers zijn dus 11001.
  • Trek 1 af: 3−1=2 en deel 2 door 2; resterend 1. Schuif een plaats naar links en zet een 1. De zes cijfers van de binaire representatie zijn: 111001.

Berekenen via de computer

[bewerken | brontekst bewerken]

De volgende code in Java kan gebruikt worden om een binaire weergave van een positief geheel getal te maken.

public class BinairOmzetten {
  public static void main(String[] args) {
    voorbeeld( 15); //     1111
    voorbeeld( 50); //   110010
    voorbeeld(200); // 11001000

    // Of gebruik de ingebouwde functionaliteit Integer.toBinaryString(int i)
  }
  
  private static void voorbeeld(int n) {
    System.out.println(n + " --> " + getBinary(n));
  }

  public static String getBinary(int n) {
    final String r;
    if (n == 0)
      r = "0";
    else if (n == 1)
      r = "1";
    else
      r = getBinary(n >>> 1) + (n & 1);
    return r;
  }
}

Andere coderingen

[bewerken | brontekst bewerken]

De normale binaire codering gaat uit van "gewogen" posities. Hierbij wordt over het algemeen het 'big-endian' principe gebruikt, zie endianness.

De Gray-code is een manier van coderen waarbij van ieder opeenvolgend paar getallen slechts één enkele bit verschilt.

"Er zijn 10 soorten mensen: Mensen die binair kunnen tellen en mensen die dat niet kunnen." is een bekende inside joke.