# Binair talstelsel

| 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 $B$ wordt voorgesteld door een rij met bits:
    $B=b_{n}b_{n-1}\ldots b_{2}b_{1}b_{0}$
wat betekent:
    $B=b_{n}2^{n}+b_{n-1}2^{n-1}+\ldots +b_{2}2^{2}+b_{1}2^{1}+b_{0}2^{0}$
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.

## Geschiedenis

* 2400BC: de Egyptenaren gebruikten breuken van machten van 2: 1/2, 1/4, ... 1/64, om de heqat, een bepaalde inhoudsmaat, op te delen. Ook gebruikten ze tabellen met veelvouden van 2 om te vermenigvuldigen.
* 3e eeuw voor Christus: de Indiaase wiskundige Pingala beschreef een binair talstelsel in de Chandaḥśāstra.
* Shao Yong (邵雍) (1011–1077) herschikte de hexagrammen uit de I Tjing in een volgorde die overeenkomt met de binaire getallen 000000 t/m 111111.
* 1703: Gottfried Wilhelm Leibniz publiceerde zijn artikel 'Explication de l'Arithmétique Binaire' (uitleg over binair rekenen).
* 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

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: 2$^{positie−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.
    Binair2$^{(positievande1)−1}$DecimaalBinair2$^{(positievande1)−1}$Decimaal 1000002$^5$32 0100002$^4$160100002$^4$16 0010002$^3$8 0001002$^2$40001002$^2$4 0000102$^1$2 0000012$^0$10000012$^0$1 1111112$^5$+2$^4$+2$^3$+2$^2$+2$^1$+2$^0$630101012$^4$+2$^2$+2$^0$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$^{(positievande1)−1}$ | Decimaal | Binair | 2$^{(positievande1)−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

| In | 256 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 | Uit |
| 001101010 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | =106 |
| 001101010 | | | +64 | +32 | | +8 | | +2 | | =106 |
| 100010000 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | =272 |
| 100010000 | +256 | | | | +16 | | | | | =272 |
| 57 | | | | −32 | −16 | −8 | 0 | 0 | −1 | =111001 |
| 57 | | | | 1 | 1 | 1 | 0 | 0 | 1 | =111001 |
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=111001$_2$.
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

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

## Andere coderingen

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.

## Trivia

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