Frage

Dies ist auf folgende Frage bezogen,

Wie Deklarieren Sie eine 32-Bit-Integer in C

Mehrere Personen erwähnt int ist immer 32-Bit auf den meisten Plattformen. Ich bin gespannt, ob dies wahr ist.

Sie wissen alle modernen Plattformen mit int einer anderen Größe? Ignorieren Dinosaurier-Plattformen mit 8-Bit- oder 16-Bit-Architekturen.

Hinweis: Ich weiß schon, wie ein 32-Bit-Integer von der anderen Frage zu erklären. Dies ist eher wie eine Umfrage, welche Plattformen (CPU / O / Compiler) unterstützen ganze Zahlen mit anderen Größen zu erfahren.

War es hilfreich?

Lösung

Wie mehrere Leute gesagt haben, gibt es keine Garantie, dass ein ‚int‘ 32 Bit sein wird, wenn Sie Variablen einer bestimmten Größe verwenden wollen, vor allem, wenn das Schreiben von Code, der Bit-Manipulationen beinhaltet, sollten Sie die ‚Standard Integer verwenden Typen von der c99-Spezifikation vorgeschrieben ist.

int8_t
uint8_t
int32_t
uint32_t

etc ...

sie in der Regel in der Form sind [u] intN_t, wo die ‚u‘ gibt an, dass Sie eine nicht signierte Menge wünschen, und N die Anzahl der Bits

die richtigen typedefs für diese sollten in stdint.h verfügbar sein je nachdem, welcher Plattform Sie kompilieren, indem diese ermöglicht es Ihnen, schön, portablen Code zu schreiben: -)

Andere Tipps

"ist immer 32-Bit auf die meisten Plattformen" - was mit diesem Snippet falsch? : -)

Der C-Standard schreibt nicht die Größe vieler seiner integralen Typen. Es hat relative Größen Mandat zum Beispiel sizeof(int) >= sizeof(short) und so weiter. Er beauftragt auch Mindestbereiche aber ermöglicht, dass mehrere Kodierungsschemata (Zweier-Komplement, einerkomplement und Zeichen / Größe).

Wenn Sie eine bestimmte Größe variabel wollen, müssen Sie eine geeignete für die Plattform verwenden, Sie laufen auf, wie die Verwendung von #ifdef ist, so etwas wie:

#ifdef LONG_IS_32BITS
    typedef long int32;
#else
    #ifdef INT_IS_32BITS
        typedef int int32;
    #else
        #error No 32-bit data type available
    #endif
#endif

Alternativ C99 und ermöglicht es oben für die genaue Breite Integer-Typen intN_t und uintN_t:


  1. Der Name typedef intN_t bezeichnet einen vorzeichenbehaftete Ganzzahl-Typen mit einer Breite N, keine Füllbits und ein Zweierkomplement-Darstellung. Somit bezeichnet int8_t einen vorzeichenbehaftete Ganzzahl-Typen mit einer Breite von genau 8 Bits.
  2. Der typedef Name uintN_t bezeichnet einen unsigned Integer-Typ mit einer Breite N. Somit bezeichnet einen uint24_t unsigned integer-Typen mit einer Breite von genau 24 Bit.
  3. Diese Typen optional. Wenn jedoch eine Implementierung Integer-Typen mit einer Breite von 8 bereitstellt, 16, 32, oder 64 Bits, keine Füllbits und (für den signierten Typen), die ein Zweierkomplement-Darstellung, so setzt er die entsprechenden typedef Namen definieren.

In diesem Moment in der Zeit, die meisten Desktop-und Server-Plattformen verwenden 32-Bit-Integer und sogar viele Embedded-Plattformen (man denke an Handheld-ARM oder x86) verwenden 32-Bit-ints. Um zu einem 16-Bit int muss man sehr klein bekommt in der Tat: denken „Berkeley mote“ oder einige der kleineren Atmel Atmega Chips. Aber sie sind da draußen.

Nein. Kleine Embedded-Systeme verwenden 16-Bit-Integer.

Es hängt stark von Ihrem Compiler. Einige kompilieren sie als 64-Bit auf 64-Bit-Maschinen, einige sich als 32-Bit kompilieren. Eingebettete Systeme sind ihre eigene kleine besondere Kugel aus Wachs.

Das Beste, was Sie tun können, um zu überprüfen:

printf("%d\n", sizeof(int));

Beachten Sie, dass sizeof wird Bytes ausdrucken. Haben sizeof(int)*CHAR_BIT zu Bits erhalten.

-Code die Anzahl der Bits, die für verschiedene Arten drucken:

#include <limits.h>
#include <stdio.h>

int main(void) {
    printf("short is %d bits\n",     CHAR_BIT * sizeof( short )   );
    printf("int is %d bits\n",       CHAR_BIT * sizeof( int  )    );
    printf("long is %d bits\n",      CHAR_BIT * sizeof( long )    );
    printf("long long is %d bits\n", CHAR_BIT * sizeof(long long) );
    return 0;
}

Nun, die meisten ARM-basierten Prozessoren Thumb-Code ausführen können, die ein 16-Bit-Modus. Dazu gehören auch die noch-nur gemunkelt Android-Notebooks und die bleeding edge Smartphones.

Auch verwenden einige Grafikrechner 8-Bit-Prozessoren, und ich würde auch diejenigen recht modern nennen.

TI sind noch OMAP Platten mit dem C55x DSPs auf sich zu verkaufen, in erster Linie für die Video-Decodierung verwendet. Ich glaube, die geliefert Compiler für diese eine 16-Bit-int hat. Es ist kaum Dinosaurier (das Nokia 770 im Jahr 2005 veröffentlicht wurde), obwohl Sie 32-Bit-DSPs erhalten können.

Sie Die meisten Code schreiben, können Sie sicher davon ausgehen, es wird nicht immer auf einem DSP ausgeführt werden. Aber vielleicht nicht alle.

Wenn Sie interessieren sich auch für die tatsächliche Max / Min Wert anstelle der Anzahl von Bits, limits.h enthält so ziemlich alles, was Sie wissen wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top