-2
votes

LONG INT Gamme dans C Programmation

Selon le lien https: //www.geeksforgeeks. org / types de données-in-C / 2

Si nous supposons long int prend 8 octets (64 bits), sa plage doit alors être de -2 ^ 63 à 2 ^ 63-1, mais cela n'est pas donné dans le lien ci-dessus. Pourquoi est-ce tellement?

et similaire non signé long int devrait avoir une plage comprise entre 0 et 2 ^ 64.

S'il vous plaît dire ce qui sera la plage de float , double et long double car il n'est pas mentionné dans le lien.


11 commentaires

Long int est sur de nombreuses plates-formes égales à juste int . Vous pouvez utiliser long long int pour utiliser un entier 64 bits.


La bonne réponse est la suivante: cela dépend de la manière dont le compilateur les implémente. La norme C nécessite uniquement une taille minimale que ces types ont


#include et long_min <= long_min <= long_value <= long_max , [ulong_min =] 0 <= non signé_long_value <=. = ULONG_MAX


Il ressemble à une erreur: pour long int et non signé long int La page dit 8 octets (64 bits) mais donne la plage de 4 octets (32 bits)


@Weathervane: Ensuite, la plage est correcte car standard uniquement Mandats long pour contenir au moins 32 bits.


Pour le point flottant, il y a un tas de définit dans


Les types de données C sont bien définis ici: en.wikipedia.org/wiki/c_data_types


@Sergeballesta La page n'est pas cohérente: c'est la plage 32 bits, mais la page dit 8 octets. Cela semble être ce que peut demander: pourquoi dit-il 8 octets mais donne cette gamme et ma réponse est que la page a commis une erreur.


La table dans le lien que vous avez affiché est incorrecte. Il affiche long comme ayant une taille de 64 bits mais seulement une plage de 32 bits incompatible. Dans tous les cas, la taille réelle dépend de la plate-forme ..


Merci interjay.


Long sur Windows est de 32 bits. Sur 32 bits Linux, il est 32 bits. Sur 64 bits Linux, il est 64 bits.


4 Réponses :


3
votes

Je préférerais ne pas utiliser geeksforgeeks comme source de connaissances. Il existe plus d'informations "imprécises" sur cette page

C standard définit des gammes minimales des types d'entier xxx

de sorte que l'entier n'est donc pas minimum de 32 bits mais 16 bits. La taille réelle peut être vérifiée dans le limites.h définit (ceci provient de la norme C): xxx

c standard définit également la plage minimale des types de points flottants - mais vous devez vérifier votre fichier .h pour les valeurs de mise en œuvre. xxx

Les valeurs données dans la liste suivante doivent être remplacé par la mise en œuvre définie expressions constantes avec des valeurs supérieures ou égales à celles illustrées: xxx

Les valeurs indiquées dans la liste suivante doivent être remplacées par des expressions constantes définies par la mise en œuvre avec des valeurs (positives) qui sont inférieurs ou égaux à ceux représentés: xxx


0 commentaires

-2
votes

Il n'y a pas vraiment une plage qui peut être spécifiée pour float , double et long double , car ce sont des nombres de points flottants. Alors que la distance entre les entiers est toujours 1, il existe différentes distances entre les numéros individuels des nombres de virgule flottante (la distance augmente avec des nombres plus grands), et donc aussi le plus petit nombre représentable en termes de montant:

  • float est une valeur 32 bits comprenant une 23 mantissa, un exposant 8 bits et un bit 1 signe. La valeur minimale ici est -3,40 ∙ 10³⁸ et le maximum de 3,40 ∙ 10³⁸. La plus petite valeur représentable en quantité est de 1,18 ∙ 10 ⁻³⁸.
  • Double est une valeur de 64 bits comprenant une 52 mantissa, un exposant 11 bits et 1 bit de signe. La valeur minimale ici est de 1,79 ∙ 10³⁰⁸ et le maximum de 1,79 ∙ 10³⁰⁸. La plus petite valeur représentable en quantité est de 2,23 ∙ 10⁻³⁸.
  • Long Double est une valeur de 80 bits comprenant une 64 MANTISSA, un exposant 15 bits et 1 bit de signe. La valeur minimale ici est -1,18 ∙ 10⁴⁹³² et le maximum de 1,18 ∙ 10⁴⁹³². La plus petite valeur représentable en quantité est de 3,37 ∙ 10⁻⁴⁹³².

    addendum: Les valeurs dépendent également de la plate-forme, les valeurs ci-dessus s'appliquent au plate-forme. Il n'y a pas de type de point flottant 80 bits sous .

    Références:


2 commentaires

C Standard ne spécifie pas les chiffres que vous avez montrés. C'est l'une des nombreuses implémentations possibles


Les gammes finies de flotteur, double, long double incluent le + - flt_max, + -dbl_max, + -ldbl_max . Commun float la plus petite valeur représentable en quantité est ~ .14 ∙ 10⁻⁴⁴, pas 2.23 ∙ 10⁻³⁸. Common double la plus petite valeur représentable en quantité est ~ 4,94 ∙ 10⁻³²⁴, pas 2.23 ∙ 10⁻³⁸. Long Double ON X86 n'est pas certainement 10 bits et souvent 16 bits avec un Binary64 gamme ou même 8 bits - dépend du compilateur / des options. Les descriptions de FP de Mantissa sont absentes et plus comme une signification tronquée.



2
votes

Si nous supposons long int prend 8 octets (64 bits), sa plage doit être -2 ^ 63 à 2 ^ 63-1 , mais cela n'est pas donné dans le lien ci-dessus. Pourquoi est-ce tellement?

Parce que geeksforgeeks est une source connue d'incorrecture et de fausseté. Ne faites pas confiance en eux. Faites confiance aux normes officielles et aux auteurs établis avec des décennies d'expérience (comme vous pouvez trouver ici le débordement de la pile - moi exclu: -)).

Guide de livres C définitif et liste

Dans cette liste, vous pouvez trouver des livres de qualité supérieure.

à côté de ce long int est généralement sur la plupart des implémentations de la même taille qu'un int , 4 octets.

Mais comme vous l'avez dit, c'est une hypothèse, il est complètement correct de demander.


0 commentaires

2
votes

Si nous supposons que longtemps int prend 8 octets (64 bits), sa portée doit être de -2 ^ 63 à 2 ^ 63-1, mais cela n'est pas donné dans le lien ci-dessus. pourquoi est-ce tellement?

Parce que c est spécifié de manière à créer des implémentations entièrement conformes à être créées pour les plates-formes qui font non suivent l'une de vos hypothèses - que long int prend 8 octets et que la valeur est codée dans le complément de deux.

La standard vous donne qui contiendra les limites de long int sur la plate-forme donnée, long_max et et Long_min et la seule garantie que vous avez donnée est que l'une quelconque de la valeur ne sera pas moins en ampleur que 2147483647 (2 ^ 32-1), respectivement.

C'est une bonne idée de ne pas faire d'hypothèses sur des spécificités de la plate-forme et de garder votre code portable de cette façon.


0 commentaires