Gå til innhold

Øving 1 i C++ - trenger hjelp


Anbefalte innlegg

ikke noe god kode. men hvorfor blir int i 432?

Fordi 32/8=4. int er den eneste datatypen som varierer i størrelse etter prosessoren, på en 16-bit prosessor er sizeof(int) = 2, 32 bit er sizeof(int) = 4 og på en 64-bit er sizeof(int) = 8

sizeof(char) = 1

sizeof(short) = 2

sizeof(long) = 4

sizeof(long long) = 8

sizeof(float) = 4

sizeof(double) = 8

 

de har ikke tatt med 80 bit floating point i C++, så hvis du vil ha det så nøyaktig må du bruke assembly, men den tar da 10 byte.

Lenke til kommentar
Videoannonse
Annonse
ikke noe god kode. men hvorfor blir int i 432?

Fordi 32/8=4. int er den eneste datatypen som varierer i størrelse etter prosessoren, på en 16-bit prosessor er sizeof(int) = 2, 32 bit er sizeof(int) = 4 og på en 64-bit er sizeof(int) = 8

sizeof(char) = 1

sizeof(short) = 2

sizeof(long) = 4

sizeof(long long) = 8

sizeof(float) = 4

sizeof(double) = 8

 

de har ikke tatt med 80 bit floating point i C++, så hvis du vil ha det så nøyaktig må du bruke assembly, men den tar da 10 byte.

Er ikke riktig. Det eneste standarden garanterer er følgende:

 

sizeof(char) == 1
sizeof(signed char) == 1
sizeof(unsigned char) ==1

 

Resten er implementasjonsavhengig. Jeg siterer ISO/IEC 14882:1998(E) eller C++ standarden som vi kaller den, fra avsnitt 5.3.3:

sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1; the result of sizeof applied to any other fundamental type (3.9.1) is implementation-defined.

 

 

 

HotStian:

 

Windows har mange slike tilfeller.

 

Linux/UNIX/BSD/Solaris/BeOS/MacOS/FreeDOS/Darwin/Hurd/Amiga Research Operating System/ReactOS(OpenWindows) vil gi deg 8 på 64-bit

 

Er nok ikke helt riktig HotStian. På Athlon64-systemet jeg testet på var sizeof(int) == 4. sizeof(long int) ble derimot 8 (tror det var en FC3 distro jeg testet på). Også på Solaris er sizeof(int) == 4, mens sizeof(long) == 8.

Endret av kjetil7
Lenke til kommentar
kan vel ikke si at alle distroene og alle solaris versjonene vil gi int == 8, men mange gjør det.

 

kan ikke si at int SKAL være 8 på 64-bits. det har jo sine fordeler og ulemper.

Det ville overraske meg veldig om Linuxdistroene gjør forskjell på int så sant det er snakk om samme maskinvare. Ja, nesten uavhengig maskinvare. Samme vil jeg også tro om Solaris.

 

Fakta er at på de aller fleste 64-bitssystemer er int fortsatt 4 bytes. Har du eksempel på en Linuxdistro som har size(int) == 8 ?

Lenke til kommentar
kan vel ikke si at alle distroene og alle solaris versjonene vil gi int == 8, men mange gjør det.

 

kan ikke si at int SKAL være 8 på 64-bits. det har jo sine fordeler og ulemper.

Det ville overraske meg veldig om Linuxdistroene gjør forskjell på int så sant det er snakk om samme maskinvare. Ja, nesten uavhengig maskinvare. Samme vil jeg også tro om Solaris.

 

Fakta er at på de aller fleste 64-bitssystemer er int fortsatt 4 bytes. Har du eksempel på en Linuxdistro som har size(int) == 8 ?

på Gentoo systemet jeg hadde før(kompilert med 64-bit fra stage1) var int 8.

Lenke til kommentar
  • 3 uker senere...
En annen ting, en int på min maskin (som er en AMD Athlon 64 med XP64 på), så er en int fortsatt 4 bytes.

 

Jeg trodde akkurat det var avhengig av hvilken kompilator man brukte? C++ skal jo følge en standard, men akkurat størrelsen på datatyper er etter hva jeg forstår ikke definert helt klart og dermed avhengig av hva kompilatorprodusenten selv har valgt å implementere.

 

Jeg er ikke 100% sikker, men jeg tror det er forklaringen.

Endret av printf
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...