Het is erg belangrijk om je te realiseren dat niet alleen een computer behoefte heeft aan beperkingen van waardes voor bepaalde types, maar dat dit ook een erg machtig middel is voor het modeleren en ook gewoon onderdeel is van allerlei vormen van algebra`s. Als je de verzameling gehele getallen:Z neemt, dan is het 8 bits integer type A daar een subtype van, omdat iedere waarde van A ook in Z voorkomt. Maar ook is Leefijd:[0..150] daar een subtype van, omdat wederom ieder element van Leefijd voorkomt in Z. Er zijn dus in de informatica meer integer types dan Z en dit heeft verder niets te maken met de beperkingen van computers.
Als je nog een keer kijkt naar die + operator dan zou je hem kunnen definieren voor Z, maar je zou hem net zo goed kunnen definieren voor A. Als je hem defnieerd voor Z en het return type kan ook Z zijn, dan weet je dat je nooit een overflow krijgt. Maar als je wilt dat het resultaat van het type A is, dan kan het wel voorkomen dat overflow foutmelding krijgt omdat de som van 2 waardes niet altijd element is van A.
Dit is geen fout van de computer, maar dit is gewoon de definitie van die plus operator. Ik kan A ook als [10..25] definieren. Je weet nu zeker dat het resultaat van in een 8 bits integer past, en alle plus operatories door de computer uitgevoerd kunnen worden, maar in sommige gevallen is het type van de som niet gelijk aan A en moet je een foutmelding krijgen.
Ok. Dit is een heel verhaal waarmee ik duidelijk wil maken dat je heel goed met types en operatoren kan werken waarmee je soms
wel overflows kan en
wil krijgen en dat ermeer integer types zijn dan alleen de alles omvattende integer type:Z en dat er ook een menselijke behoefte is aan die andere integer types. En het belangrijkste punt is dat deze overflows niet ontstaan door een tekortkoming aan de pc, maar
alleen ontstaan door de definitie van een operator. Ik hoop dat je het tot zover met me eens bent.
Nu ga ik nog een keer de stap ondernemen om terug te gaan naar type Bit:[0,1] (dit is een integer type). Ik ga nu nog een keer de + operator definieren waarvoor moet gelden dat het resultaat ook van het type Bit is.
0+0=0
0+1=1
1+0=1
1+1=overflow.
Ik zal nog nog een keer duidelijk uitleggen waarom hier dus wel een overflow optreed. Het resultaat van 1+1 is dus 2, maar aangezien 2 geen element van Bit, moet je dus een foutmelding opwerpen. Het is dus
onjuist om te zeggen dat je 1+1 dan 1 moet maken omdat dit in strijd is met de definitie van een plus operator in het algemeen.
Nu hoop ik echt dat je het met mee eens bent, want anders loop ik dit allemaal voor niets te typen.
Nu ga ik nog een keer de + operator definieren voor de bool.
0+0=0
0+1=1
1+0=1
1+1=1
Zoals je ziet krijg je dus bij de boolean versie geen overflow omdat dit nergens op zou slaan.
code:
1
2
3
4
| 1+1
true or true //vertaling
true //tautologie
1 //terug vertalen |
je ziet nu dus dat er een verschil in definitie is voor de bit + en de boolse +
Verder vind ik ook nog steeds dat een bool een volledig ander concept is dan een integer, en dit verschil dwing ik ook op in api`s. Ik denk ook niet dat we elkaar kunnen overtuigen, maar persoonlijk vind ik het typesysteem van C te zwak en dit maakt de taal onnodig gecompliceerd en foutgevoeliger. Ik denk ook niet dat ik je verder kan overtuigen en ik heb er eigelijk ook geen zin meer in om tijd eraan te verspillen.