Hvis du har brug for eksplicit at arbejde med heltal af en bestemt bredde, så er #include <inttypes.h> en mulighed. Så kan du bruge int64_t for 64-bit heltal, int32_t for 32-bit heltal og int16_t for 16-bit heltal.
Bemærk, ikke alle oversættere har inttypes.h. Men hvis du kører under Unix skulle den være god nok; den er med i Single Unix Specification version 2.
Og hvis du kører C99, så kig på stdint.h (jeg har aldrig selv prøvet C99, så jeg kan ikke sige noget om den).
I C tidernes morgen var det meningen at int skulle være den hurtigeste integer regne form, derfor var alle erklæringer implicit int hvis de ikke var erklæret anderledes (dette sidste er ikke sandt længere i C ). De vise fædre satte så op at følgende regel op short <= int <= long og short er minimum 16 bit, char minimum 8 bit, long minimum 32 bit, på dette tidspunkt fandtes der maskiner der ikke 8,16,32 eller 64 bit, nogle maskiner havde 9-bit char og 33 eller 36-bit word men de kunne alle overholde c standarden, 33 bit maskinen var bit 33 fortegn bit og jeg mener at den brugte almindelige 8-bit char. Nogle afvigerer begyndte at kalde 64-bit integer for "long long" for at de kunne beholde størrelse af short, int og long og undgå at skrive deres dårlige kode om for de havde brudt med de oprindelige antagelser og var sikre i deres misbrug af deres kompiler afhængige kode.
Ja størrelsen afhænger (generelt) af processoren, men med fremkomsten af 64-bit systemer er de tidligerer løfter ofte glemt af compiler producenterne, kravene i standarden er ikke til maskinerne men til compilerne.
For at lave dine programmer cross platform kompatible bør du nøje overveje om du vil give dine variable en dynamisk størrelse (int, short, long) eller en konkret størrelse som fx. int32_t eller fastsætte en minimums størrelse som vist nok hedder mint32_t (minimum 32 bit, olennert kan sikkert give den nøjagtige navn). Dette er især vigtigt hvis du gemmer dine data i binært format på permanente medier så du ellers kan få en grim oplevelse hvis dine data bliv gemt i 16-bit int og du forsøger at læse dem ind i 32-bit int.
Selve conceptet long long stryger mig meget mod hårene, skal det så hedder long long long på 128-bit maskiner? men det er nærmest religion og af ovennævnte årsager mener jeg at det er forkert. "De" lovede mig at int skulle være den mest effiktive integer type og det overholder de færreste 64-bit compiler idag, øv.
De mindste (i bitbredde) heltalstypertyper på din platform som kan indeholde x bits hedder int_least8_t, uint_least8_t, int_least16_t, uint_least16_t og så videre op til 64.
må indrømme jeg ikke havde forventet en SÅ grundig besvarelse! men jeg takker mange tusinde gange, det gjorde mig megemt meget klogere.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.