Verwijderd schreef op 01 december 2002 @ 17:44:
Omdat dat zo afgesproken is. Dat heeft niks met systemen, platformen te maken of wat dan ook, het is puur en alleen conventie per platform/architectuur, per OS of per compiler.
Over het algemeen gebruik je een int als standaard rekenwaarde, maar daar is verder geen reden voor, behalve historisch besef, heb ik het idee.
quoting K&R: "int will normally reflect the most 'natural' size for a
particular machine"
Een integer is dus per definitie de standaard rekenwaarde waarop alles geoptimaliseerd is, en vaak is dat de registergrootte. Ik zeg dus, per defintie, een 8bit register systeem, kun je weinig doen met -127..128 bits integers. Op deze architecturen zijn de integers veelal 16 bits.
Aangezien er vele compilers, op nog meer platformen op nog meer architecturen zijn, zijn er altijd uitzonderingen. Het type-probleem is nooit echt gedefineerd, en daarom is het ieder voor zich.
Waarom dat gcc dan 32bits integers gebruikt weet ik niet, maar daarvoor zal wel een goede reden zijn (op alpha zijn ze in ieder geval wel 64bits, en is sizeof(int) == sizeof (long)).
En short staat tussen byte en int in.

.
Dat rijtje klopte inderdaad niet helemaal.. foutje van mij
char <= short <= int <= long ( <= long long )
Waarbij een aantal dingen verplicht zijn, zoals een long die minimaal 32bits dient te zijn.
Erm u zwamt, Blizard heeft het over waarden groter dan 32..., ik neem aan dat ie daarmee 32768 bedoelt. Daarbij heb je hoe dan ook een long nodig, en heb je dus een enorme bug als je op een 16-bit platform een int gebruikt.
Huh? Dat was toch helemaal de vraag niet? De vraag was of het verstandig is om longs (32bits variabelen eigenlijk) te gebruiken op een 32bit systeem terwijl de compiler een 16bit compiler is. Mijn antwoord is nee, omdat je toch met een 16bit instructieset werkt en dat de normale int (16bit) hiervoor de optimale grootte is.
Juist als je met grote(re) getallen gaat rekenen moet je er goed rekening mee houden of de getallen waarmee je omgaat wel zullen passen, en/of goede portable bounds checking invoeren.
Dat is logisch.. Precies om die reden wordt er gekeken tijdens een ./configure wat de groottes zijn van de 4 basis-eenheden.
Ik weet dat een normale 16 bit int kleiner is dan een long (32 bit). Maar visual C gebruikt bv voor een int ook 32 bit, omdat de processors van vandaag dit gewoon aangenamer vinden om met te rekenen. Je kan deze dan wel signed en unsigned gaan gebruiken.
Maar de processor heeft meer tijd nodig om een 16bit int om te zetten naar zijn 32 bit systeem dan dat hij moeite heeft met een 32bit long .. of niet ?
16bits waardes in een 32bits register stoppen gaat redelijk snel, hiervoor bestaan vaste processor-instructies die dit snel kunnen regelen. Dit is op zich het probleem dus niet. Andersom (32bits getallen op 16bits systemen) brengt het wel erg veel overhead met zich mee.
Maar met de huidige processors is het dan niet zo dat de cpu meer moeite heeft met 16bit waardes te converteren naar 32bit, om daar dan met verder te rekenen, om dan tenslotte na de berekeningen terug deze waarde om te zetten naar een 16bit int.
Nu is m'n vraag : alles long declareren ... of toch maar luisteren naar de docenten. En zijn er eventueel websites die hier meer informatie over bieden ?
Eventjes terugkomend op je eerste posting:
Als jij al je variabelen als long zou defineren, dan zou de compiler hiervoor allemaal extra slagen moeten maken om die 32bits variabelen in de 16bits registers te proppen. Dat je huidige processor 32bits getallen aankan, is leuk, maar daarvan maak je dus absoluut geen gebruik, en de processor kan ook niet zien dat jij dat eigenlijk wel wilt (die voert ten slot van rekening alleen maar uit wat em is opgedragen).
Als je dus wilt dat je echt van je 32bits registers en rekencapatiteit gebruikt maakt, moet je dus een 32bit compiler hebben die je code omzet in 32bits instructies.
Yo dawg, I heard you like posts so I posted below your post so you can post again.