Question

Ceci est lié à la question suivante,

Comment déclarer un entier 32 bits en C

Plusieurs personnes mentionnées ici ont toujours 32 bits sur la plupart des plateformes. Je suis curieux de savoir si cela est vrai.

Connaissez-vous des plateformes modernes avec un int de taille différente? Ignorer les plates-formes de dinosaures avec des architectures 8 bits ou 16 bits.

REMARQUE: Je sais déjà comment déclarer un entier 32 bits de l'autre question. Celui-ci ressemble plus à une enquête pour savoir quelles plates-formes (CPU / OS / Compilateur) supportent des entiers avec d'autres tailles.

Était-ce utile?

La solution

Comme plusieurs personnes l'ont indiqué, rien ne garantit qu'un "int" aura 32 bits. Si vous souhaitez utiliser des variables d'une taille spécifique, en particulier lorsque vous écrivez du code comportant des manipulations de bits, vous devez utiliser le paramètre "Entier standard". Types 'mandatés par la spécification c99.

int8_t
uint8_t
int32_t
uint32_t

etc ...

ils sont généralement de la forme [u] intN_t, où le 'u' indique que vous souhaitez une quantité non signée et N est le nombre de bits

Les correctes typographiques appropriées doivent être disponibles dans stdint.h, quelle que soit la plate-forme pour laquelle vous compilez. Leur utilisation vous permet d'écrire un code portable agréable: -)

Autres conseils

" est toujours 32 bits sur les plus plates-formes " - Qu'est-ce qui ne va pas avec cet extrait? : -)

La norme C n’impose pas les tailles de nombre de ses types entiers. Il autorise les tailles relatives, par exemple sizeof (int) > = sizeof (short) , etc. Il impose également des plages minimales mais autorise plusieurs schémas de codage (complément à deux, complément à un et signe / magnitude).

Si vous voulez une variable de taille spécifique, vous devez en utiliser une qui convient à la plate-forme sur laquelle vous travaillez, telle que l'utilisation de #ifdef , quelque chose comme:

#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

Alternativement, C99 et supérieur autorise les types d'entiers de largeur exacte intN_t et uintN_t :

  1. Le nom typedef intN_t désigne un type entier signé avec une largeur N , aucun bit de remplissage et une représentation complémentaire à deux. Ainsi, int8_t désigne un type entier signé avec une largeur d’exactement 8 bits.
  2. Le nom typedef uintN_t désigne un type entier non signé de largeur N . Ainsi, uint24_t désigne un type entier non signé ayant une largeur d’exactement 24 bits.
  3. Ces types sont facultatifs. Cependant, si une implémentation fournit des types entiers avec des largeurs de 8, 16, 32 ou 64 bits, aucun bit de remplissage et (pour les types signés) ayant une représentation complémentaire à deux, elle doit définir le typedef noms.

À l'heure actuelle, la plupart des plates-formes de bureau et de serveur utilisent des entiers 32 bits, et même de nombreuses plates-formes intégrées (pensez à un ordinateur de poche ARM ou x86) utilisent des int 32 bits. Pour obtenir un int 16 bits, vous devez être vraiment très petit: pensez à "Berkeley mote". ou quelques-uns des plus petits chips Atmel Atmega. Mais ils sont là-bas.

Non. Les petits systèmes embarqués utilisent des entiers 16 bits.

Cela dépend énormément de votre compilateur. Certains les compilent en tant que 64 bits sur des machines 64 bits, d'autres en tant que 32 bits. Les systèmes embarqués sont leur propre petite boule de cire spéciale.

La meilleure chose à faire pour vérifier:

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

Notez que sizeof affichera des octets. Faites sizeof (int) * CHAR_BIT pour obtenir des bits.

Code permettant d'imprimer le nombre de bits pour différents types:

#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;
}

Eh bien, la plupart des processeurs basés sur ARM peuvent exécuter du code Thumb, qui est un mode 16 bits. Cela inclut les ordinateurs portables Android encore rumeurs et les smartphones ultramodernes.

De plus, certaines calculatrices graphiques utilisent des processeurs 8 bits, que je qualifierais également de assez modernes.

TI vend toujours des cartes OMAP avec les DSP C55x, principalement utilisées pour le décodage vidéo. Je crois que le compilateur fourni pour cela a un int de 16 bits. C’est à peine un dinosaure (le Nokia 770 est sorti en 2005), bien que vous puissiez obtenir des DSP 32 bits.

La plupart du code que vous écrivez, vous pouvez supposer en toute sécurité qu'il ne sera jamais exécuté sur un DSP. Mais peut-être pas tous.

Si vous êtes également intéressé par la valeur Max / Min actuelle au lieu du nombre de bits, limits.h contient à peu près tout ce que vous voulez savoir.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top