Hoe een 32-bits geheel getal in C te declareren

Wat is de beste manier om een ​​integer type te declareren dat altijd 4 byte is op alle platforms? Ik maak me geen zorgen over bepaalde apparaten of oude machines die 16-bits inthebben.


Antwoord 1, autoriteit 100%

#include <stdint.h>
int32_t my_32bit_int;

Antwoord 2, autoriteit 12%

C houdt zich niet veel bezig met de exacte grootte van integer-types, C99 introduceert de header stdint.h, wat waarschijnlijk de beste keuze is. Voeg dat toe en u kunt b.v. int32_t. Natuurlijk ondersteunen niet alle platforms dat.


Antwoord 3, autoriteit 10%

Corey’s antwoord is correct voor “best”, naar mijn mening, maar een simpele “int” zal in de praktijk ook werken (aangezien je systemen met 16-bits int negeert). Op dit moment hangt zoveel code ervan af dat het 32-bit is dat systeemverkopers het niet gaan veranderen.

(Bekijk ook waarom lang 32-bits is op veel 64-bits systemen en waarom we “lang lang” hebben.)

Een van de voordelen van het gebruik van int32_t is echter dat u dit probleem niet in stand houdt!


Antwoord 4, autoriteit 4%

Je zou een kopie van brg_types.hvan Brian Gladman kunnen vinden als je stdint.hniet hebt.

brg_types.hzal de grootte van de verschillende gehele getallen op je platform ontdekken en zal typedefs maken voor de gebruikelijke groottes: 8, 16, 32 en 64 bits.


Antwoord 5, autoriteit 3%

C99 of hoger

Gebruik <stdint.h>.

Als uw implementatie de complementaire 32-bits gehele getallen van 2 ondersteunt, moet deze int32_tdefiniëren.

Zo niet, dan is int_least32_thet beste dat een geheel getal is dat door de implementatie wordt ondersteund en dat ten minste 32 bits is, ongeacht de representatie (twee-complement, één-complement, enz.).

Er is ook int_fast32_t, een integer-type van ten minste 32 bits breed, gekozen met de bedoeling de snelste bewerkingen voor die vereiste grootte mogelijk te maken.

ANSI C

U kunt longgebruiken, wat gegarandeerd minimaal 32-bits breed is als gevolg van de minimale bereikvereisten die door de standaard worden gespecificeerd.

Als u liever het kleinste gehele type gebruikt om in een 32-bits getal te passen, dan kunt u preprocessor-statements zoals de volgende gebruiken met de macro’s gedefinieerd in <limits.h>:

#define TARGET_MAX 2147483647L
#if   SCHAR_MAX >= TARGET_MAX
  typedef signed char int32;
#elif SHORT_MAX >= TARGET_MAX
  typedef short int32;
#elif INT_MAX   >= TARGET_MAX
  typedef int int32;
#else
  typedef long int32;
#endif
#undef TARGET_MAX

Antwoord 6

Als stdint.h niet beschikbaar is voor uw systeem, maak er dan zelf een. Ik heb altijd een bestand met de naam “types.h” met typedefs voor alle ondertekende/niet-ondertekende 8, 16 en 32 bit-waarden.


Antwoord 7

ook afhankelijk van uw doelplatforms kunt u autotools gebruiken voor uw bouwsysteem

het zal zien of stdint.h/inttypes.h bestaat en als dat niet het geval is, zal het geschikte typedefs maken in een “config.h”


Antwoord 8

stdint.h ligt voor de hand, maar is niet per se beschikbaar.

Als u een draagbare bibliotheek gebruikt, is het mogelijk dat deze al overdraagbare gehele getallen met een vaste breedte biedt.
SDL heeft bijvoorbeeld Sint32(S is voor “ondertekend”) en GLib heeft gint32.


Antwoord 9

U kunt 32 bits declareren met ondertekend of niet-ondertekend lang.

int32_t variable_name;
uint32_t variable_name;

Other episodes