Development Blog
Talstelsels, we maken er elke dag gebruik van. Als we rekenen, of iets met getallen doen, dan gebruiken we een talstelsel.
Een talstelsel is een bepaalde manier om getallen weer te geven. Er zijn meerdere soorten talstelsels naast wat we standaard gebruiken.
Een aantal voorbeelden waar andere talstelsels gebruikt worden dan normaal:
- MAC adres (hexadecimaal)
- IP (V6) adres (hexadecimaal)
- Kleuren (bijvoorbeeld in CSS bestanden) (hexadecimaal)
- Elektronica met computers (magnetron, telefoon, televisie, pc etc.) (binair)
We gebruiken allemaal doorgaans het decimale talstelsel.
Het grond getal van een talstelsel geeft aan hoeveel getallen het stelsel bevat.
Het decimale talstelsel heeft 10 als grondgetal, dus we hebben 10 getallen: 0 t/m 9.
Willen we verder dan 9 tellen dan moeten we meerdere getallen combineren.
Combineren van getallen (decimale stelsel [0,1,2,3,4,5,6,7,8,9])
Als we tellen dan is het logisch dat het getal 10 na 9 komt.
Maar waarom komt 10 na 9? Wat is daarvan de reden? En waarom is dat belangrijk?
Het is belangrijk om de reden te weten waarom 10 na 9 komt omdat je anders ook niet met andere talstelsels kan werken.
Om te beginnen gaan we het getal opsplitsen in:
- Basis getal: Dit getal is een combinatie van getallen uit reeks getallen van het talstelsel.
- Tel getal: Dit getal is een getal in de reeks van het talstelsel.
Als we beginnen met tellen, dus bij 0 (eerste getal in de reeks van 0 t/m 9) dan is ons basis getal ook het eerste getal in de reeks, dus ook 0.
Als we doortellen dan komen we bij het getal 9, het laatste getal in de reeks. In de reeks komt 10 niet voor, dus hoe krijgen we het getal 10?
Herinner je nog dat we een basis getal hebben? Dat getal is nog steeds 0, want we hebben er nog niets mee gedaan.
Omdat we met het tel getal aan het einde van de reeks zijn, beginnen we met het tel getal weer aan het begin van de reeks,
en we verhogen het basis getal: 0 wordt dus 1 (0 + 1 = 1).
We hebben nu dus een basis getal met de waarde: 1 en een tel getal met de waarde: 0.
Om het getal te noteren, schrijven we het op van rechts naar link.
We beginnen met het tel getal: 0, en dan schrijven we het basis getal: 1.
Van rechts naar links geschreven krijgen we dan: het getal 10.
Als we verder tellen dan kunnen we gewoon weer 1 optellen bij het tel getal, totdat we weer aan het einde van de reeks zijn, dus het getal 9.
Daarna verhogen we het basis getal weer en het tel getal word weer 0, we hebben dan dus het getal 20. Dit proces kan je steeds herhalen.
Belangrijk
Het basis getal wat we gebruiken, bestaat uit een combinatie van getallen.
Omdat het basis getal ook een getal is, heeft het basis getal ook zijn eigen basis en tel getal.
Dit betekent dat het basis getal moet overeen komen het talstelsel waarin je werkt.
In het decimale stelsel is dat dus van 0 t/m 9, maar bijvoorbeeld in het octale stelsel waar je maar de cijfer 0 t/m 7 hebt,
kan je geen basis getal hebben van 9 (omdat in de reeks van 0 t/m 7 geen 9 voorkomt).
Andere talstelsels
We hebben nu dus het (voor ons makkelijkste) decimale talstelsel besproken, maar laten we het ook een met andere talstelsels proberen.
Naast het decimale talstelsel zijn er nog vele andere talstelsels. Naast het decimale worden deze twee ook veel (in de ICT) gebruikt:
- Binaire talstelsel
- Hexadecimale talstelsel.
Het binaire talstelsel heeft 2 als grondgetal. We gebruiken dus de eerste twee getallen in de getallen reeks, dat zijn dus: het getal 0 en het getal 1.
In het begin van de reeks is het basis getal: 0, eveneens het tel getal.
Als we nu verder willen tellen, dan moeten we eerst controleren of het volgende getal in de reeks voorkomt ( 0 t/m 1). We verhogen dus het getal 0 naar 1, dit komt in de reeks voor dus dit kan.
We kunnen het getal nu niet weer verhogen, want 2 komt immers niet voor in de reeks 0 t/m 1.
We moeten dus het basis getal verhogen, van 0 naar 1 (1 komt immers voor in de reeks), en het tel getal word weer de waarde van het begin van de reeks: 0.
Als we het getal noteren dan krijgen we dus het binaire getal: 10 (binair).
Omdat binaire getallen overzichtelijk weer te geven, noteren we de getallen in groepen van 4, en vullen de lege ruimte op met nullen.
Omdat we alles van rechts naar links noteren krijgen we: 0010.
Als we nu weer het getal verhogen, dan word het tel getal 1, basis getal hoeft niet verhoogd te worden,
dus als we bovenstaande volgen krijgen we het binaire getal: 0011.
Echter als we nu weer het getal willen verhogen zitten we met een probleem, want het zowel het basis getal als het tel getal is aan het einde van de reeks (0 t/m 1).
Zoals eerder besproken heeft het basis getal, ook zijn eigen basis en tel getal.
Dus we verhogen het basis getal (van het basis getal) van 0 naar 1, en het tel getal (van het basis getal) word 0.
Het tel getal wat ook 1 is, word dus weer 0 (einde van de reeks).
Dit resulteert dus in het getal: 0100, waarbij het basis getal rood gemarkeerd is en het tel getal blauw.
Bovenstaande kan wat verwarrend zijn, lees het desnoods meerdere keren door!
Als we het bovenstaande herhalen dan kunnen we een lijstje maken:
| Binair | Decimaal |
| 0000 | 0 |
| 0001 | 1 |
| 0010 | 2 |
| 0011 | 3 |
| 0100 | 4 |
| 0101 | 5 |
| 0110 | 6 |
| 0111 | 7 |
| 1000 | 8 |
| 1001 | 9 |
| 1010 | 10 |
Hexadecimale talstelsel [0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F]
Het hexadecimale talstelsel heeft 16 als grondgetal.
We gebruiken dus 16 getallen, maar wat kunnen we nog meer gebruiken dan 0 t/m 9?
0 t/m 9 zijn 10 getallen, we moeten dus nog 6 andere (getallen?) hebben.
Daarvoor gebruikt men in het hexadecimale stelsel de letters A t/m F naast de getallen 0 t/m 9.
Als we beginnen met tellen, dan beginnen we gewoon weer met het basis en tel getal, 0.
We kunnen gewoon de reeks af gaan. Na de "normale" getallen (0 t/m 9) gaan we verder met A t/m F. Als we bij het hexadecimale getal F (15 decimaal) zijn aan beland, dan verhogen we gewoon het basis getal weer en beginnen met het tel getal weer vooraan in de reeks. Het basis getal wordt dus: 1 en het tel getal word dus 0, resultaat: 10 (16 decimaal).
Ook hier kunnen we een lijstje van maken:
| Hexadecimaal | Decimaal |
| 0 | 0 |
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 5 |
| 6 | 6 |
| 7 | 7 |
| 8 | 8 |
| 9 | 9 |
| A | 10 |
| B | 11 |
| C | 12 |
| D | 13 |
| E | 14 |
| F | 15 |
| 10 | 16 |
| 11 | 17 |
| 64 | 100 |
| FF | 255 |
| 100 | 256 |
Lijst van talstellen naast elkaar:
| hexadecimaal | decimaal | binair |
| 00 | 0 | 0000 0000 |
| 01 | 1 | 0000 0001 |
| 02 | 2 | 0000 0010 |
| 03 | 3 | 0000 0011 |
| 04 | 4 | 0000 0100 |
| 05 | 5 | 0000 0101 |
| 06 | 6 | 0000 0110 |
| 07 | 7 | 0000 0111 |
| 08 | 8 | 0000 1000 |
| 09 | 9 | 0000 1001 |
| 0A | 10 | 0000 1010 |
| 0B | 11 | 0000 1011 |
| 0C | 12 | 0000 1100 |
| 0D | 13 | 0000 1101 |
| 0E | 14 | 0000 1110 |
| 0F | 15 | 0000 1111 |
| 10 | 16 | 0001 0000 |
| 11 | 17 | 0001 0001 |
| 64 | 100 | 0110 0100 |
| FF | 255 | 1111 1111 |
| 100 | 256 | 0001 0000 0000 |
Allemaal wel leuk en aardig, maar wat heb ik eraan?
Waarschijnlijk helemaal niets, want andere talstelsels worden eingelijk alleen maar in bepaalde beroepen/situatie's gebruikt.
Ben je programmeur of wil je het worden, dan kom je vroeg of laat toch in aanraking met andere talstelsels.
Tot slot
Heb je opmerkingen over het artikel, klopt er iets niet, zie je spelfouten, ik hoor het graag
Crypteq Aka BC7

De blog ligt jammer genoeg al enige tijd stil, en we (voornamelijk ik) hebben steeds belooft om nieuwe artikelen uit te brengen, wat tot op heden niet echt goed gelukt is.
Ikzelf (BC7) ben zelfs op het forum amper meer actief, doordat ik niet veel tijd tijd heb naast mijn stage en werk.
Toch wil ik tussen de werkzaamheden door actiever worden, en dus ook weer blog berichten gaan posten
.
Mijn aanpak voor de blog heb ik wel veranderd, ik zal niet meer op een vaste tijd artikelen plaatsen, maar waneer ik tijd heb.
Daarnaast zal ik veel meer ingaan op de probleemstelling/hoe en wat, waar je dus geen programmeer skills voor hoeft te hebben om het te snappen.
Voor de programmeer voorbeelden die ik voorleg, ga ik er wel vanuit dat men over ervaring met programmeren beschikt.
Ik ga dus niet meer de basis behandelen, echter als je vragen hebt dan kan je ze altijd stellen
.
BC7

Het is jullie vast opgevallen dat er al tijden geen artikels meer zijn verschenen in deze blog. De hoofdreden was het feit dat een bug in het oude forumsysteem me hiervan weerhield. Gelukkig is dit herstelt met de huidige update en kunnen jullie binnenkort weer gloednieuwe artikels tegemoet zien!
Megadreams
C++ Public, Private, Protected, Static, Virtual, Signed en Unsigned
·
262 bezichtigingen

Hoewel je ze voornamelijk terug ziet in classes kom je ze ook wel tegen op andere plaatsen. Ik zal ze behandelen vanuit het perspectief van de classes. Artikelen die op dit volgen zullen dan ook over de classes gaan. Dit artikel is onderdeel van de categorie "classes" in het C++ overzicht en dus is het goed mogelijk dat er andere artikelen verschijnen die bij de vorige categorie terecht komt of bij de volgende categorieën. Het simpelweg kopiëren en plakken van de codes zal logischer wijze errors opleveren. Omdat zoals altijd in de comments achter dergelijke regels is verteld dat deze fout zijn. Het is dan ook puur om een visuele weergave te geven.

Uit "CScript.h" in de source van V:Online. Door: Megadreams
Public
Het woord zegt het hem zelf, public oftewel publiek. De functie/variabele is rechtstreeks aan te roepen vanuit een andere class. Meer valt er eigenlijk niet te zeggen van "public".
Ik zal het even laten zien doormiddel van kleine voorbeelden:
#include <iostream>
using namespace std;
class voorbeeldClass
{
public:
int getal;
virtual void printHelloWorld() { cout << "Hello World\n";};
};
int main()
{
voorbeeldClass test;
test.printHelloWorld(); // Er zal ongeacht waar je het geplaatst hebt de tekst "Hello World" op jou scherm verschijnen.
test.getal = 250; // Zet het getal in de class op 250.
cout << test.getal; // Geeft 250.
cin.get();
}
Private
Namen in C++ zeggen al erg veel waarover het gaat, zo ook bij private welk in het nederlands privé betekend. Variables en classes die als private zijn gedefiniëerd kunnen enkel vanuit deze class worden aangeroepen.
Het wil natuurlijk niet betekenen dat je nooit vanuit een andere class een variable dat op private staat kan veranderen. Hiervoor zal je een public functie moeten maken in die class welke je aanroept en die de variable zal aanpassen. Protected komt vrijwel overeen met private.
Voorbeelden:
#include <iostream>
using namespace std;
class voorbeeldClass
{
private:
int getal;
int berekenSom(int getal1, int getal2);
public:
virtual void veranderGetal(int aantal) { getal = aantal; };
virtual int leesGetal() { return getal; };
};
int main()
{
voorbeeldClass test);
test.getal = 250; // Dit zal een error geven, welke je vertelt dat deze variable ontoegankelijk is.
cout << test.berekenSom(10,20); // Dit zal ook simpelweg een error opleveren dat de functie ontoegankelijk is.
cout << test.getal; // Het getal is ook ontoegankelijk om te lezen.
test.veranderGetal(10); // Dit roept de public functie "veranderGetal" aan welke de variable getal wel kan aanpassen.
cout << test.leesGetal(); // Zal 10 teruggeven welke in de private variable getal is opgeslagen. Ook deze public functie heeft doordat hij in dezelfde class zit toegang tot de variable.
cin.get();
}
Static
We zijn aanbeland bij "static" of in het nederlands: "statisch". Normaliter als je een variable definiëert in een class zal deze telkens als je een nieuwe object maakt opnieuw gekopiëerd worden. Dit maakt het mogelijk om er bij elk object een andere waarde aan toe te kennen. Maar soms wil je dat gewoon niet en daarvoor is static.
Als je een variable of zelfs een functie (minder toepasselijk") naast public, private etc ook nog eens met static definiëert zal deze voor elk object exact hetzelfde zijn. De variable zal ongeacht door welk object het gewijzigd wordt ook voor de andere gewijzigd zijn.
Een static functie is al iets ingewikkelder, deze hebben ten eerste geen toegang tot "this->" welk object afhankelijk is. Je gebruikt een static functie vooral wanneer je een functie in de class wil hebben welke geen initialisatie van deze class nodig heeft, dit kan ook bij een static variable.
Voorbeelden:
#include <iostream>
using namespace std;
class voorbeeldClass
{
public:
int getal1;
static int getal2;
void test();
static void test2();
};
int main()
{
voorbeeldClass test1;
voorbeeldClass test2;
test1.getal1 = 10;
test2.getal1 = 20;
cout << test1.getal1; // Geeft "10".
cout << test2.getal1; // Geeft "20".
test1.getal2 = 50;
test2.getal2 = 100;
cout << test1.getal2; // Geeft "100".
cout << test2.getal2; // Geeft "100".
voorbeeldClass::test(); // Geeft een error.
voorbeeldClass::test2(); // Werkt
cin.get();
}
Virtual
Virtual of in het nederlands virtueel gebruik je om een virtuele functie te maken in de header file. Een normale gedefiniêerde functie zal enkel zorgen voor de verwijzing naar deze functie in de source file. Een virtuele functie daarentegen is enkel te vinden in de header en zit zelfs al meteen in de definitie in de header. Dit is best enkel te gebruiken voor 1 regel functies. Om een bepaald getal op te halen of iets kleins uit te rekenen.
Virtuele functies zijn natuurlijk ook maar enkel in staat om te werken met variables in de header file en niet met deze in de source file.
Voorbeelden:
// Test.h
#include <iostream>
using namespace std;
class voorbeeldClass
{
public:
int berekenSom(int getal1, int getal2); // Heeft een achterliggend script in "test.cpp".
virtual int berekenVerschil(int getal1, int getal2) { return (getal1-getal2); }; // Het script zit al in "test.h".
};
// Test.cpp
#include "test.h"
int voorbeeldClass::berekenSom(int getal1, int getal2) // De achterliggende functie voor de definitie in test.h.
{
return (getal2+getal2);
}
int main()
{
voorbeeldClass test;
cout << test.berekenSom(10,20); // Geeft 30.
cout << test.berekenVerschil(20,10); // Geeft 10.
cin.get();
}
Signed & Unsigned
Ik heb deze even samen genomen omdat er een korte uitleg achter zit en omdat ik het anders toch twee keer zo goed als hetzelfde uitleg. Ten eerste signed & unsigned worden enkel gebruikt bij variables met een type dat een getal representeerd. Ik zal in deze uitleg me enkel houden bij integers. Een integer bestaat op 32 & 64 bits computer uit 32 bits. De laatste bit (Meest Significante Bit of MSB) geeft weer of het getal negatief of positief is. Signed wat je eigenlijk nooit typt doordat elke variable standaard al signed is geeft weer dat het getal zowel negatief als positief kan zijn. Unsigned daarentegen kan enkel een positief getal zijn en ook 0.
Wat is nu het grote voordeel van signed & unsigned? Als je zeker weet dat een getal nooit onder de 0 zal gaan dan heb je een voordeel als je signed gebruikt. Je zal namelijk die laatste bit "openstellen" voor het getal zelf. Een signed integer gaat van −2.147.483.648 tot 2.147.483.647. Je ziet dat je aan de negatieve kant met 1 hoger zit dan aan de positieve kant. Dit simpelweg omdat 0 al bij de positieve kant is bij gerekend. Een unsigned integer gaat van 0 tot 4.294.967.295. Als je dus enkel met een positief getal te maken hebt kan je zo het bereik aan de positieve kant maar liefst verdubbelen!
Voorbeelden:
#include <iostream>
using namespace std;
int main()
{
signed int getal1; // Hetzelfde als: "int getal1;"
unsigned int getal2;
getal1 = 2147483647;
cout << getal1; // Geeft netjes "2147483647" het totale maximum van een signed integer.
getal1+1;
cout << getal1; // Een overflow, resulteert in het verder gaan aan de negatiave kant. Uitkomst is normaliter: "−2147483648". Maar je zal eerder een error krijgen.
getal2 = 2147483650;
cout << getal2; // Geeft netjes "2147483650", een unsigned heeft aan de positieve kant namelijk een dubbel bereik.
}
Dit was het dan voor deze keer, in het volgende artikel kan je lezen over de classes en hoe ze te maken.

Dat er een verandering ging komen in deze blog, dat was zeker. Vandaag zullen we dus overgaan op deze nieuwe manier van werken. Zoals de meeste onder jullie weten was het eerste plan om elke week een editie uit te brengen met daarin de artikels gerelateerd aan scripten/programmeren. Echter hadden we al snel door dat het gewoon te veel tijd kostte om dit ook daadwerkelijk werkelijkheid te maken. Nadat we besloten om edities uit te brengen wanneer we zelf wilde hadden we ook al snel door dat het ook geen oplossing was. We hebben dan nu besloten om de artikels te schrijven wanneer we maar willen zonder dat we een hele editie daarvoor uitbrengen. Om dit overzichtelijk te houden hebben we allerlei overzichten gemaakt waar je makkelijk en snel naar het juiste artikel kan gaan.
De komende tijd zullen we de oudere artikels ook bijwerken zodat deze beter in het geheel passen en dus niet meer editie gerelateerd zijn. Om het jullie te maken zal ik de overzichten hieronder plaatsen tot het overzicht aan de linkerzijde geupdate is door BC7.
Megadreams
Overzicht
- C++ Overzicht
- C# Overzicht
- VB.net Overzicht
- PHP Overzicht
- Javascript Overzicht
- MySQL Overzicht
- Java Overzicht
- CSS Overzicht
- Game Maker Overzicht
- GXT Editor Overzicht
Heb jij kennis van scripten/programmeren?
Wil jij helpen andere deze kennis aan te brengen?
Aarzel dan niet en stuur een PB naar één van de blogbeheerders.

CSS
Alle artikels omtrent CSS die zijn gepubliceerd op de Development Blog kan je hier vinden. Ze staan in chronologische volgorde.
Basis
- Er zijn nog geen publicaties.
| Nota: |
| De Development Blog is druk bezig met het maken en publiceren van alle artikels van alle onderdelen, dit neemt natuurlijk veel tijd in beslag en daarom kan het zijn dat bepaalde artikels nog niet zijn gemaakt. Je kan oftewel deze voorstellen om te maken of wachten tot wij ze geschreven hebben. |

Java
Alle artikels omtrent Java die zijn gepubliceerd op de Development Blog kan je hier vinden. Ze staan in chronologische volgorde.
Basis
- Er zijn nog geen publicaties.
Android
- Er zijn nog geen publicaties.
| Nota: |
| De Development Blog is druk bezig met het maken en publiceren van alle artikels van alle onderdelen, dit neemt natuurlijk veel tijd in beslag en daarom kan het zijn dat bepaalde artikels nog niet zijn gemaakt. Je kan oftewel deze voorstellen om te maken of wachten tot wij ze geschreven hebben. |

Alle artikels omtrent Game Maker die zijn gepubliceerd op de Development Blog kan je hier vinden. Ze staan in chronologische volgorde.
Basis
| Nota: |
| De Development Blog is druk bezig met het maken en publiceren van alle artikels van alle onderdelen, dit neemt natuurlijk veel tijd in beslag en daarom kan het zijn dat bepaalde artikels nog niet zijn gemaakt. Je kan oftewel deze voorstellen om te maken of wachten tot wij ze geschreven hebben. |

Alle artikels omtrent MySQL die zijn gepubliceerd op de Development Blog kan je hier vinden. Ze staan in chronologische volgorde.
Basis
- Er zijn momenteel geen publicaties.
| Nota: |
| De Development Blog is druk bezig met het maken en publiceren van alle artikels van alle onderdelen, dit neemt natuurlijk veel tijd in beslag en daarom kan het zijn dat bepaalde artikels nog niet zijn gemaakt. Je kan oftewel deze voorstellen om te maken of wachten tot wij ze geschreven hebben. |

Alle artikels omtrent C++ die zijn gepubliceerd op de Development Blog kan je hier vinden. Ze staan in chronologische volgorde.
Basis
Classes
| Nota: |
| De Development Blog is druk bezig met het maken en publiceren van alle artikels van alle onderdelen, dit neemt natuurlijk veel tijd in beslag en daarom kan het zijn dat bepaalde artikels nog niet zijn gemaakt. Je kan oftewel deze voorstellen om te maken of wachten tot wij ze geschreven hebben. |
Development Blog
![]()
Development Blog
Info
Development Blog is een
blog die alles te maken heeft met
programmeren en scripten.
Publicatie
Word dag voor publicatie aangegeven.
Waardering
We stoppen hier elke keer weer veel energie in
dus wij zullen het waarderen als je je mening geeft!
Deze blog wordt u aangeboden door:
BC7
Megadreams
Flitskikker
Index
Overzichten
C++
C#
VB.net
PHP
Javascript
MySQL
Java
CSS
Game Maker
GXT Editor
Zoeken
Talen
C#
C++
CSS
HTML
Java
Javascript
PHP
Visual Basic
leden in deze blog
0 leden, 0 gasten, 0 anonieme leden
Jouw creatie in deze blog?
Stuur dan een bericht naar één van de blogbeheerders!
Laatste artikelen
-
Talstelsels algemeen13 december 2012 -
Update bericht van BC713 december 2012 -
Hier zijn we weer!07 oktober 2012 -
-
Dev Blog: Wijziging28 juni 2012
Laatste reacties
-
Talstelsels algemeenVWO-er - 15 dec 2012 - 13:46 -
Talstelsels algemeenCrypteq - 13 dec 2012 - 23:49 -
Talstelsels algemeenSpacyColours - 13 dec 2012 - 23:27 -
Talstelsels algemeencommando - 13 dec 2012 - 23:21 -
Hier zijn we weer!Bassieboy35 - 18 okt 2012 - 14:53



