Anders tellen

advertisement
Excellerend
Kwartaaltip 2016-3
Excellerend
Heemraadweg 21
2741 NC Waddinxveen
06 – 5115 97 46
[email protected]
BTW: NL1876.58.316 B.01
BANK: NL72ABNA053.68.25.491
KVK: 24389967
Anders tellen
Toen ik begin jaren negentig computerles kreeg werd mij uitgelegd dat een bit een één kan zijn
of een nul, en dat een byte 8 bits was. Omdat iedere bit twee waarden kon hebben, was het
maximaal aantal waarden 2^8 (2 tot de macht 8, ofwel 2x2x2x2x2x2x2x2). Maar omdat je begint
met tellen bij 0, is de maximale waarde 255.
Jaren daarvoor had ik al iets soortgelijks met wiskunde gehad. Een digitaal getal bestaat uit 7
balkjes die aan of uit zijn, voorbeelden:
De precieze vraag weet ik niet meer, maar het was een instinker. Hoeveel combinaties zijn er
mogelijk? Dat is 2^7. Maar omdat de combinatie waarbij alle balkjes uit zijn niet telde, was het
antwoord 127 (2^7 - 1).
Binair
Computers slaan alles binair op. Eén byte kan daarom maximaal de decimale waarde van 255
voorstellen. Worden de getallen groter, dan zijn er meer bytes nodig.
Wat heeft dit nu met Excellerend te maken? Een aantal jaar ben ik actief geweest op de website
www.beterrekenen.nl, een website waar je per werkdag vier sommetjes kunt krijgen om je
scherp te houden. Best leuk, ook voor kinderen. Eén van de regelmatig terugkerende sommetjes
betrof het binaire stelsel. Dan moest je twee binaire getallen optellen en een antwoord kiezen
uit drie of vier binaire getallen. Ik had daarvoor een lijst met 255 rijen gemaakt en had die vraag
altijd goed.  Maar ja, een uitdaging was het niet meer. Dus zocht ik die in Excel.
Ik zocht dus een formule die een binair getal kon omzetten in een decimaal getal. Zoiets is vast
op Internet te vinden, maar zelf puzzelen is veel leuker! De lijst met mogelijkheden had ik al in
Excel staan. In kolom A het binaire getal en in kolom C het decimale getal:
Pagina 1 van 5
www.excellerend.nl
Excellerend
Kwartaaltip 2016-3
Een ander belangrijk lijstje is de volgende met machten van 2:
Het binaire getal is opgebouwd uit 8 enen en nullen en we rekenen met machten van 2. Het
meest rechtse cijfer (de 8e) kan een 0 en een 1 betekenen. (Zie bovenste plaatje) De 7e kan een 2
(zie regel 3 bovenste plaatje) en een 0 betekenen. De 6e kan een 4 (regel 5) en een 0 betekenen
etcetera. Maar hoe krijg je dat in een Excelformule?
Als het binaire getal in cel A1 staat, kan het 8e cijfer als volgt achterhaald worden:
= RECHTS(A1;1)*2^0
In woorden: neem vanaf rechts gezien van het getal in cel A1 één cijfer en vermenigvuldig dat
met 2 tot de macht 0. 2^0 is gelijk aan 1. En het cijfers kan een 1 of en 0 zijn. De uitkomst is dan 1
of 0.
De waarde van het zevende cijfer is als volgt te bepalen:
= DEEL(A1;7;1)*2^1
In woorden: Neem van het getal in cel A1 het 7e cijfer en vermenigvuldig dat met 2 tot de macht
1. De vermenigvuldiging kan dan zijn 1 x 2 of 0 x 2. De uitkomst is dan 2 of 0.
Het 6e cijfer:
=DEEL(A1;6;1)*2^2
Dit wordt dan: 1 x 4 of 0 x 4.
En de anderen:
=DEEL(A1;5;1)*2^3. Dit kan zijn 1 x 8 of 0 x 8.
=DEEL(A1;4;1)*2^4. Dit kan zijn 1 X 16 of 0 x 16.
=DEEL(A1;3;1)*2^5. Dit kan zijn 1 X 32 of 0 x 32.
=DEEL(A1;2;1)*2^6. Dit kan zijn 1 X 64 of 0 x 64.
=LINKS(A1;1)*2^7. Dit kan zijn 1 X 128 of 0 x 128.
Zoals in het eerste rijtje te zien is, is het binaire getal 00000011 gelijk aan het decimale getal 3.
Controle: het 7e cijfer is gelijk aan 1 * 2 en het 8e cijfer is gelijk aan 1 x 1: 2 + 1 = 3.
Wat is dan het getal 00011011?
De vierde, vijfde, zevende en achtste cijfers zijn een 1. De rest levert toch nul op.
1 x 2^4 + 1 x 2^3 + 1 x 2^1 + 1 x 2^0 = 16 + 8 + 2 + 1 = 27. En dat klopt ook!
Pagina 2 van 5
www.excellerend.nl
Excellerend
Kwartaaltip 2016-3
De uiteindelijke Excelformule wordt dan de optelling van alle bovengenoemde formules:
=LINKS(A1;1)*2^7+DEEL(A1;2;1)*2^6+DEEL(A1;3;1)*2^5+DEEL(A1;4;1)*2^4+DEEL(A1;5;1)*2^3+D
EEL(A1;6;1)*2^2+DEEL(A1;7;1)*2^1+RECHTS(A1;1)*2^0
N.B. Omdat ik met de functie LINKS, DEEL en RECHTS werk, is het resultaat tekst, geen getal.
Optellen
Maar kun je dan in Excel ook binaire getallen optellen met een formule? Want dat was de opgave
op de website.
Vooraf kun je bedenken dat de getallen uit enen en nullen bestaan. De optelling van cijfers op
dezelfde positie is dan 0, 1 of 2. Mmmm, die 2 betekent dat op die positie een 0 moet komen te
staan, maar ook dat de som van de positie links ervan met ééntje opgehoogd moet worden.
Of anders gezegd, het achtste getal is een 1 als de optelling 1 is, en anders wordt het een nul:
=ALS(RECHTS(A2;1)+RECHTS(A3;1)=1;1;0)
Het cijfer op de 7e positie kan een 0, een 1 of een 2 zijn, maar het kan ook een drie worden als de
optelling van de twee cijfers op de achtste positie en 2 is! Mmmm, bij een oneven resultaat
wordt het een 1, en anders een 0.
=ALS(IS.ONEVEN(DEEL(A2;7;1)+DEEL(A3;7;1)+ALS(RECHTS(A2;1)+RECHTS(A3;1)=2;1;0));1;0)
In woorden wordt het al een heel verhaal. We tellen het zevende cijfer van de twee getallen bij
elkaar op èn tellen daarbij op een 1 (als de som van de twee achtste cijfers een 2 is) of een 0 (in
de andere gevallen).
Positie 6 wordt weer langer:
=ALS(DEEL(A2;6;1)+DEEL(A3;6;1)+ALS(DEEL(A2;7;1)+DEEL(A3;7;1)+ALS(RECHTS(A2;1)+RECHTS(A3
;1)=2;1;0)=2;1;0)=1;1;0)
Mocht je hier afhaken, dan snap ik dit. Ik vond de uitdaging ook niet leuk meer. Het aantal
mogelijkheden wordt namelijk te groot en de formule niet meer te behappen.
Excelformules
Hoe zou Microsoft dit opgelost hebben? In Excel zelf zijn verschillende formules om binaire
getallen om te zetten naar decimale getallen.
Typ in een cel =BIN en Excel vult het al aan tot:
De functie BIN.N.DEC converteert een binair getal naar een decimaal getal.
Maakt het nou veel uit of je ‘mijn’ formule gebruikt of de functie van Excel? Yep. Als ik met:
=ASELECTTUSSEN(0;1)&ASELECTTUSSEN(0;1)&ASELECTTUSSEN(0;1)&ASELECTTUSSEN(0;1)&ASEL
ECTTUSSEN(0;1)&ASELECTTUSSEN(0;1)&ASELECTTUSSEN(0;1)&ASELECTTUSSEN(0;1)
Pagina 3 van 5
www.excellerend.nl
Excellerend
Kwartaaltip 2016-3
geheel at random 8 enen en nullen achter elkaar plaats en dat in een kolom over alle 1.048.576
rijen van een werkblad, dan doet mijn formule er bijna 16 seconden over om de decimale
getallen te berekenen. De functie =BIN.N.DEC redt het in minder dan 4 seconden.
Maar kun je dan met Excel makkelijk binaire getallen optellen? Ja dat kan, maar met een omweg.
Je moet eerst van de binaire getallen decimale getallen maken, die optellen en dan weer
omzetten naar een binair getal.
In de cellen B2 en B3 staan binaire getallen en in D2 en D3 de functie =BIN.N.DEC() om er
decimale getallen van te maken. In cel D4 staat de optelling ervan met =SOM(D2:D3) en in B4
staat de functie =DEC.N.BIN(D4) welke een decimaal getal omzet naar een binair getal.
Maar ik vind het niet mooi want het getal bestaat niet uit 8 enen en nullen! Dat kan op twee
manieren aangepast worden.
Manier 1 is 8 nullen vastplakken voor het resultaat, en dan vanaf rechts 8 karakters pakken:
1) =RECHTS(”0000000”&DEC.N.BIN(D4);8)
Manier 2 is meer cosmetisch. Je kunt namelijk via de opmaak van een cel bepalen hoeveel cijfers
voor de komma je wilt zien. Maar dan moet het resultaat van de functie eerst als een decimaal
getal worden, want dat is het nu niet. De truc hiervoor is het te vermenigvuldigen met 1.
=DEC.N.BIN(D4)*1 zorgt ervoor dat het een getal wordt. Getallen zijn standaard rechts uitgelijnd,
terwijl tekst standaard links uitgelijnd is.
De bovenste cel bevat alleen de formule =DEC.N.BIN(D4). De onderste is: =DEC.N.BIN(D4)*1
Als de uitkomst een getal geworden is, ga je naar de celeigenschappen (Ctrl+1, rechter muisknop
> Celeigenschappen of via het pijltje linksonder in de groepering Getal op de tab Start.
.
Klik op de groep Aangepast en typ 8 nullen in het vak rechts:
Pagina 4 van 5
www.excellerend.nl
Excellerend
Kwartaaltip 2016-3
Klik dan op OK en het resultaat is:
Tip: Speel ook eens met de functie =ROMEINS()
Einde kwartaaltip 3-2016
De kwartaaltip(s) zijn als PDF te downloaden via: www.excellerend.nl\kwartaaltips.html
Wilt u een op maat gemaakte cursus Excel voor uw organisatie regelen? Zoekt u ondersteuning
in het bouwen van rekenmodellen, controles, of denkt u dat iets mogelijk is in Excel maar u weet
niet hoe? Neem dan contact op met Richard Meijles: 06 – 5115 97 46 of via e-mail:
[email protected].
Wilt u geen kwartaaltips meer ontvangen? Klik dan op: [email protected]
Hebt u een verzoek voor een kwartaaltip? Klik dan op: [email protected] en vermeld tevens
uw Excelversie.
Richard Meijles
Pagina 5 van 5
www.excellerend.nl
Download