Maison  >  Article  >  développement back-end  >  Est-ce que `long` est garanti d'avoir au moins 32 bits en C ?

Est-ce que `long` est garanti d'avoir au moins 32 bits en C ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 17:39:30979parcourir

Is `long` Guaranteed to Have at Least 32 Bits in C  ?

Long est-il garanti d'avoir 32 bits ?

Malgré les hypothèses courantes basées sur la norme C, la question se pose de savoir si long est garanti d'avoir au moins 32 bits. La norme classe les types intégraux fondamentaux comme :

sizeof(char) ≤ sizeof(short int) ≤ sizeof(int) ≤ sizeof(long int)

Cependant, beaucoup supposent que sur la base de cette hiérarchie, long doit avoir 32 bits. Cependant, la norme indique explicitement que le nombre de bits dans un octet est défini par l'implémentation.

Réclamation d'Alf P. Steinbach

Malgré cette apparente contradiction, Alf P. Steinbach a affirmé que long est garanti comme étant de 32 bits. Il a basé cette affirmation sur la limite implicite de la plage de valeurs qu'un long peut contenir (LONG_MIN à LONG_MAX).

La norme C fait référence à la norme C (18.3.2), qui définit :

LONG_MIN ≤ -2^31 + 1
LONG_MAX ≥ 2^31 - 1

Connexion à une représentation 32 bits

Bien que cela établisse une plage à long terme, cela ne garantit pas explicitement 32 bits. Cependant, il existe deux possibilités :

  1. Représentation en complément à deux :
    Si les nombres négatifs sont représentés en complément à deux, le stockage de LONG_MIN ou LONG_MAX nécessite 32 bits.
  2. Bit de signe explicite :
    Si un bit de signe est utilisé pour les nombres négatifs, le stockage total nécessite toujours 32 bits.

Conclusion

Bien que la norme C n'exige pas explicitement que long ait 32 bits, l'exigence de plage minimale (LONG_MIN à LONG_MAX) le nécessite implicitement. En effet, la représentation de ces valeurs nécessite soit 32 bits de stockage, soit un mécanisme spécifique à l'implémentation avec une capacité de valeur équivalente. Par conséquent, on peut conclure que C garantit que long a au moins 32 bits.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn