Est int en C Toujours en 32 bits?
Ceci est lié à la question suivante,
Comment Déclarer un Entier de 32 bits en C
Plusieurs personnes mentionnées int est toujours en 32 bits sur la plupart des plates-formes. Je suis curieux de savoir si cela est vrai.
Connaissez-vous des plateformes modernes de l'int d'une taille différente? Ignorer les dinosaures plates-formes avec 8-bit ou 16-bit architectures.
REMARQUE: je sais déjà comment déclarer un entier de 32 bits à partir de la question. Celui-ci est plus comme une enquête afin de savoir quelles plates-formes (UC/OS/Compilateur) le soutien des entiers avec d'autres tailles.
- Il est moderne 8 bits et 16 bits des processeurs, tout simplement pas dans l'environnement PC.
Vous devez vous connecter pour publier un commentaire.
Comme plusieurs personnes l'ont dit, il n'existe aucune garantie qu'un 'int' sera de 32 bits, si vous souhaitez utiliser des variables d'une taille spécifique, en particulier lors de l'écriture de code qui implique peu de manipulations, vous devez utiliser les Types Integer' mandaté par le c99 spécification.
etc...
ils sont généralement de la forme [u]intN_t, où le " u " indique que vous souhaitez un unsigned quantité, et N est le nombre de bits
le bon typedefs pour ceux-ci devraient être disponibles dans stdint.h quelle que soit la plate-forme pour la compilation, l'utilisation de ces permet l'écriture de nice, code portable 🙂
[u]intN_t
type, mais il n'y a pas de garantir une mise en œuvre, un tel type. Cependant, ils sont peu et loin entre, donc c'est probablement la meilleure approche si votre compilateur est C99-conforme.{,u}int_{least,fast}{8,16,32,16}_t
types de obligatoire en C99 (§7.18.1.1) si. Ils peuvent être utilisés pour la même raison-le seul inconvénient étant qu'ils sont seulement la garantie d'être au moins (au lieu de exactement) 8/16/32/64 bits de large."est toujours 32 bits sur plus plates-formes" - quel est le problème avec ce morceau de code? 🙂
Le C norme ne précise pas la taille de plusieurs de ses types intégraux. Il ne mandat tailles relatives, par exemple,
sizeof(int) >= sizeof(short)
et ainsi de suite. Il a également mandats minimum gammes, mais permet l'utilisation de plusieurs systèmes de codage (en complément à deux, les compléter et signer/amplitude).Si vous le souhaitez de taille variable, vous devez utilisez l'une adaptée pour la plate-forme que vous utilisez, tels que l'utilisation de
#ifdef
's, quelque chose comme:Sinon, C99 et ci-dessus permet de largeur exacte types d'entiers
intN_t
etuintN_t
:typedef
nomintN_t
désigne un entier signé de type avec une largeur deN
, pas de rembourrage bits, et un complément à deux de la représentation. Ainsi,int8_t
désigne un entier signé de type avec une largeur de 8 bits.typedef
nomuintN_t
désigne un type entier non signé avec la largeurN
. Ainsi,uint24_t
désigne un type entier non signé avec une largeur de exactement 24 bits.typedef
noms.long
mais quand unint
suffirait semble idiote, bien. J'ai besoin d'une variable qui peut stocker des nombres de 0 à 999,999,999, et je préfère ne pas en faire une version 64 bits de large (commelong
s sont parfois) lors de la 32-bits, c'est beaucoup. Il semble étrange que les types d'entiersintN_t
n'étaient pas disponibles dès le début. Ils ont réalisé des Processeurs de bits différents largeurs serait en cours d'exécution C logiciel, mais ils n'avaient pas la peine d'avoir un portable moyen de garantir bits largeur de 30 ans?En ce moment dans le temps, la plupart des ordinateurs de bureau et les plates-formes de serveur utiliser les nombres entiers de 32 bits, et même de nombreuses plateformes embarquées (pensez poche ARM ou x86) utiliser 32 bits
int
s. Pour obtenir de 16 bitsint
vous avez à être très petit, en effet: penser "Berkeley mote" ou de certains des plus petits Atmel Atmega jetons. Mais ils sont là.Pas. Petits systèmes embarqués de 16 bits entiers.
sizeof(int) == 1
sur certains TI Dsp, par exemple, C2000. Les deuxchar
etint
16 bits (etshort
aussi, bien sûr).Largement dépend de votre compilateur. Certains de les compiler en tant que 64 bits sur les ordinateurs 64 bits, certains de les compiler en 32 bits. Les systèmes embarqués sont de leur propre peu spécial boule de cire.
Meilleure chose que vous pouvez faire pour vérifier:
Noter que
sizeof
imprimé octets. Nesizeof(int)*CHAR_BIT
pour obtenir des morceaux.Code pour imprimer le nombre de bits de différents types:
sizeof
peut fonctionner sur les types, alors il n'est pas nécessaire pourrandomint
. Deuxièmement,CHAR_BITS
n'est pas garanti à huit. Il y a un peu plus de choses, mais ce sont les erreurs liées à la question.CHAR_BIT
. J'ai mal orthographié dans mon commentaire.%d
est le mauvais spécificateur de format poursize_t
Bien, la plupart des BRAS sur les processeurs pouvez exécuter Pouce code, qui est un mode 16 bits. Que comprend le encore-que-selon la rumeur, Android portable et le saignement-bord smartphones.
Aussi, certaines calculatrices graphiques 8 bits des processeurs, et je dirais assez moderne ainsi.
TI sont toujours en vente OMAP les conseils C55x Dsp sur eux, principalement utilisé pour le décodage vidéo. Je crois que le compilateur fourni pour cette 16 bits int. Il n'est guère de dinosaure (le Nokia 770 a été publié en 2005), bien que vous pouvez obtenir 32 bits Dsp.
Plus de code que vous écrivez, vous pouvez supposer qu'il ne sera jamais exécuté sur un DSP. Mais peut-être pas tous.
Si vous êtes également intéressés à la réelle Valeur Max/Min au lieu de le nombre de bits, les limites.h contient pratiquement tout ce que vous voulez savoir.