in c, est-il sûr de supposer que tailleof (court) code> sera 2, ou
Tailleof (int) code> sera 4 sur une plate-forme donnée, par exemple? Même si ceux-ci sont consistants, existe-t-il des tailles de type volatiles, par exemple
Tailleof (Double Long) Code> pourrait être de taille 16 varié? Quels types sont sûrs pour supposer que leur taille est constante? Je sais
char code> est l'un d'entre eux
Tailleof (Char) code> est toujours 1, mais tout autre constant? P>
3 Réponses :
Toute variable de taille peut être volatil
Exemple: P>
volatile double x[1000000];
Ce n'est pas vraiment ce que je voulais dire, désolé d'être incertain.
Ce n'est pas la signification de "volatile" la question pose de la question.
Il n'apparaît pas que l'OP consiste à faire référence au mot-clé code> volatile code>, mais plutôt à la notion que les tailles de données peuvent varier entre les implémentations.
pour les entiers de taille fixe, comme Notez que intz_t code> Vous pouvez être sûr que la taille est
64 / char_bit code>. Vous pouvez être sûr que
tailleof (char) code> est 1. À peu près tout le reste a une taille minimale, pas une taille exacte. P>
char_bit code> n'est pas corrigé. Il a une taille minimale de 8. Voir est char_bit jamais> 8? P>
Tailleof (INT64_T) CODE> peut être inférieur à huit. La "taille" d'un objet en C est le nombre d'octets qu'elle nécessite, mais un octet peut être plus de huit bits dans une implémentation C.
@ERICPOSTPISCHIL Pourquoi un octet serait-il jamais quelque chose que 8 bits?
@ user226527 Il existe des systèmes avec des octets supérieurs à 8. Un octet est vraiment la taille de char code>.
@ user226527: Parce que C a été conçu pour être une langue portable dans le sens où les compilateurs et les environnements d'exécution pourraient être fournis sur une grande variété de matériel, y compris le matériel qui a utilisé différentes tailles de mots. Il n'y a rien dans les lois de la physique qui nécessite des octets d'être huit bits et que des ordinateurs étaient en cours de développement, une grande variété de conceptions ont été essayées.
La taille de Les normes C ne disent rien de la taille exacte des types entiers à part de C standard ne nécessite que les points suivants sur la taille des types p>
Le reste est de la mise en œuvre dépendante. Les compilateurs sont libres d'allouer plus de mémoire que sont spécifiés dans la norme. Donc, dans la plupart des systèmes modernes, vous constaterez que Voici une table de wiki qui donne plus d'informations à ce sujet - p>
Pour les numéros de points flottants, C ou C ++ ne spécifient rien. Il existe une norme (IEEE754): les flotteurs sont 32 bits et les doubles sont 64. Ceci est une norme matérielle, pas une norme C. P> int code> sera dépendante du compilateur. Maintenant, quelques jours, sur la plupart des systèmes, vous trouverez
Tailleof (int) code> à être 4. Plus tôt lorsque les processeurs étaient de 16 bits, un Int était de 2 octets. Mais maintenant, deux jours, 4 seront courants pour
int code> et 8 octets pour
long int code>. P>
char code>. Un
long code> peut être de 4 octets sur le système de 32 bits et 8 octets sur des systèmes de 64 bits. La norme spécifie toutefois la taille minimale qu'un type de données doit être de. P>
tailleOf (char) code> == 1 li>
char_bit code>> = 8 li>
court code> et
int code>> = 16 bits, li>
long code>> 32 bits, li>
long long code> (depuis C99)> = 64 bits li>
Tailleof (Char) <= Tailleof (court) <= Tailleof (int) <= Tailleof (Long) <= Tailleof (long Long) CODE> LI>
ul>
Char code>: -127 à 127 li>
non signé Char code>: 0 à 255 LI>
court code>: -32767 à 32767 li>
Sans signé court code>: 0 à 65535 li>
int code>: -32767 à 32767 li>
non signé INT code>: 0 à 65535 li>
long code>: -2147483647 à 2147483647 LI>
non signé long code>: 0 à 4294967295 li>
long long code>: -9223372036854775807 à 9223372036854775807 LI>
non signé long long code>: 0 à 18446744073709551615 li>
ul>
blockQuote>
int code> sera 32 bits,
long code> serait
64 code> bits et
long double < / code> serait 16 octets. Encore une fois, ces valeurs pourraient varier, mais je les ai mentionnées parce qu'elles sont des valeurs communes que vous verriez sur une machine moderne. P>
Que diriez-vous de courts? Y a-t-il des tailles minimales pour le court-circuit?
@ user226527 A court code> doit être au moins 16 bits de taille identique à celle de
int code>
Notez que la norme C spécifie explicitement les gammes et non des tailles dans les bits.
@_STICTIC_ASSERT C'est correct. Mais nous pourrions déduire les tailles dans les bits de leur gamme
@Abhishek Sûr. Je voulais juste ajouter ce commentaire pour les futurs lecteurs :)
@Abhishek: J'ai pris la liberté de réparer des fautes de frappe. Votre réponse est assez précise et approfondie, mais la norme C spécifie un peu (!) Sur les types de points flottants, mais pas autant que l'IEEE-754.
@Abhishek: La norme C implique-t-elle que tailleof (float) <= tailleof (double) <= tailleof (double double) code>?
@chqrlie> Il existe trois types de flottants réels, désignés comme flotteurs, doubles et longs doubles. L'ensemble des valeurs du type float est un sous-ensemble de l'ensemble des valeurs du type double; L'ensemble des valeurs du double double est un sous-ensemble de l'ensemble des valeurs du double double de type. C'est tout ce que j'ai trouvé. Il n'a rien spécifié de la tailles de types de flotteurs
Related: Stackoverflow.com/questions/2331751/...
Est-ce que cela répond à votre question? La taille d'un int dépend du compilateur et / ou du processeur?