Avatar billede tzr Nybegynder
18. marts 2003 - 18:53 Der er 7 kommentarer og
2 løsninger

32 bit og 64 bit

Bliver long og short int større og mindre afhængig af processortype ?

På en 32 bit processor er det sådan her:
long = 32 bit eller 4 byte
short = 16 bit eller 2 byte

men er det så sådan her på en 64 bit processor:
long = 64 bit eller 8 byte
short = 32 bit eller 4 byte
Avatar billede arne_v Ekspert
18. marts 2003 - 18:58 #1
Det afhænger af compileren.

Der er ingen generelle regler.
Avatar billede arne_v Ekspert
18. marts 2003 - 18:59 #2
32 bit computer => 32 bit long + 16 bit short er vist meget meget
almindelig.

Men om det på 64 bit er:
  32 bit long + 16 bit short
eller:
  64 bit long + 32 bit short
det er forskelligt.
Avatar billede olennert Nybegynder
18. marts 2003 - 20:49 #3
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).
Avatar billede segmose Nybegynder
19. marts 2003 - 09:40 #4
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.
Avatar billede arne_v Ekspert
19. marts 2003 - 09:57 #5
segmose>

long long int brugerne er vist ikke afvigere - langt de fleste
moderne C compilere understøtter den.
Avatar billede segmose Nybegynder
19. marts 2003 - 10:24 #6
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.
Avatar billede arne_v Ekspert
19. marts 2003 - 10:30 #7
Tja.

Jeg synes heller ikke konstruktionen er køn, men .....
Avatar billede olennert Nybegynder
19. marts 2003 - 13:31 #8
segmose>

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.
Avatar billede tzr Nybegynder
24. marts 2003 - 15:50 #9
må indrømme jeg ikke havde forventet en SÅ grundig besvarelse! men jeg takker mange tusinde gange, det gjorde mig megemt meget klogere.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester