Pourquoi Long/Int ?
Résolu/Fermé
RicoAceArmy
Messages postés
18
Date d'inscription
dimanche 16 août 2015
Statut
Membre
Dernière intervention
5 novembre 2016
-
16 août 2015 à 23:36
RicoAceArmy Messages postés 18 Date d'inscription dimanche 16 août 2015 Statut Membre Dernière intervention 5 novembre 2016 - 17 août 2015 à 02:23
RicoAceArmy Messages postés 18 Date d'inscription dimanche 16 août 2015 Statut Membre Dernière intervention 5 novembre 2016 - 17 août 2015 à 02:23
A voir également:
- Pourquoi Long/Int ?
- Pc long a demarrer - Guide
- Traduction anglais français texte long gratuit photo - Guide
- Le mot le plus long jeu gratuit - Télécharger - Outils professionnels
- Int converter - Télécharger - Bureautique
- Redémarrage en cours long - Forum Windows 10
3 réponses
NHenry
Messages postés
15172
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
11 décembre 2024
350
Modifié par NHenry le 17/08/2015 à 00:20
Modifié par NHenry le 17/08/2015 à 00:20
Préambule, je développe souvent en 32 bits, donc ce que j'écris est peut être pas totalement exact.
En C#, un int c'est 32 bits et un long c'est un 64bits.
Pourquoi utiliser un int plutôt qu'un long, c'est surtout que les instructions sont plus rapide que sur les longs en général (une seuls case mémoire concernée).
Un int (32 bits) va de environ -2147483648 à +2147483647 (enfin, -2^31 à +2^31-1), ou en non signé, de 0 à +4294967295 (2^32-1 exactement) ce qui suffit largement à la majorité des besoins.
Un long par contre avec ses 64 bits est "plus lourds" à manipuler ( c'est relatif, surtout avec les processeurs 64 bits actuels), il est utilisé dans les cas de grands nombres ou de pointeurs (dans les programmes 64 bits). De plus, c'est le double en consommation mémoire.
Par exemple, le TickCount (nombre de millisecondes depuis le dernier démarrage de la machine) tel qu'il est fourni est un int qui saute de +2^31-1 à -2^32 au bout de 24 jours environ, dans le cas de machines qui sont à forte disponibilité, donc qui redémarrent rarement, il arrive souvent que cela pose problème. Il m'arrive donc souvent dans mon développement professionnel d'utiliser un wrapper qui transforme ce int en long en gérant le changement de signe.
Mais si tu as une valeur à échanger entre plusieurs threads et donc marquée en volatile, le int est à préférer (car son écriture se fait en une seule opération mémoire et donc pas de risque de se faire couper l'écriture au milieu).
J'interviens principalement en VB6 et VB.NET, avec un peu de C#, mais la modération m'amène souvent sur d'autre langages.
En VB.NET pensez à activer "Option Explicit" et "Option Strict"
En C#, un int c'est 32 bits et un long c'est un 64bits.
Pourquoi utiliser un int plutôt qu'un long, c'est surtout que les instructions sont plus rapide que sur les longs en général (une seuls case mémoire concernée).
Un int (32 bits) va de environ -2147483648 à +2147483647 (enfin, -2^31 à +2^31-1), ou en non signé, de 0 à +4294967295 (2^32-1 exactement) ce qui suffit largement à la majorité des besoins.
Un long par contre avec ses 64 bits est "plus lourds" à manipuler ( c'est relatif, surtout avec les processeurs 64 bits actuels), il est utilisé dans les cas de grands nombres ou de pointeurs (dans les programmes 64 bits). De plus, c'est le double en consommation mémoire.
Par exemple, le TickCount (nombre de millisecondes depuis le dernier démarrage de la machine) tel qu'il est fourni est un int qui saute de +2^31-1 à -2^32 au bout de 24 jours environ, dans le cas de machines qui sont à forte disponibilité, donc qui redémarrent rarement, il arrive souvent que cela pose problème. Il m'arrive donc souvent dans mon développement professionnel d'utiliser un wrapper qui transforme ce int en long en gérant le changement de signe.
Mais si tu as une valeur à échanger entre plusieurs threads et donc marquée en volatile, le int est à préférer (car son écriture se fait en une seule opération mémoire et donc pas de risque de se faire couper l'écriture au milieu).
J'interviens principalement en VB6 et VB.NET, avec un peu de C#, mais la modération m'amène souvent sur d'autre langages.
En VB.NET pensez à activer "Option Explicit" et "Option Strict"
ze-life-of-quent1
Messages postés
1582
Date d'inscription
lundi 8 février 2010
Statut
Membre
Dernière intervention
17 octobre 2015
776
17 août 2015 à 00:33
17 août 2015 à 00:33
Bonjour,
Pour la même raison que la plupart des gens roulent en voiture plutôt qu'en camion : ça prend moins de place! Je m'explique : à chaque fois que vous utilisez une nouvelle variable dans votre programme, votre système d'exploitation réserve un nouvel espace dans votre mémoire vive (RAM) pour pouvoir stocker le contenu de cette dernière. Pour chaque int déclaré, 4 octets sont réservés. Pour un long, c'est le double (8 octets). Ainsi, avec 1Mo de mémoire vive, il est possible de stocker 250 000 int contre seulement 125 000 long. Tout cela est donc une pure question d'économie de ressources.
Et non, les int n'acceptent pas les long. Seul l'inverse est vrai, puisqu'un long est plus long qu'un int, il peut les stocker. Si vous arrivez à stocker votre nombre dans un int, c'est simplement que votre nombre est trop petit pour être un long. Pour afficher le nombre maximal qu'accepte un type, vous pouvez utiliser type.MaxValue.
Exemple :
Voici ce que ce bout de code me retourne (sous Linux, avec Monodevelop) :
Maintenant, regardons ce qui se passe si l'on essaye de stocker un nombre supérieur à la valeur maximale que peut prendre chaque type :
Sous Monodevelop :
Et sous Visual Studio (ici, j'utilise la version Enterprise 2015, le message d'erreur est peut-être différent suivant la version que vous utilisez) :
Dans les deux logiciels, le programme ne compile pas, puisqu'un dépassement d'entier (également appelé integer overflow) se produit.
Voilà, j'espère avoir éclairé votre lanterne. Si vous avez d'autres questions, n'hésitez pas :).
Je voudrais savoir pourquoi on utilise int alors qu'on pourrait toujours utiliser long ?
Pour la même raison que la plupart des gens roulent en voiture plutôt qu'en camion : ça prend moins de place! Je m'explique : à chaque fois que vous utilisez une nouvelle variable dans votre programme, votre système d'exploitation réserve un nouvel espace dans votre mémoire vive (RAM) pour pouvoir stocker le contenu de cette dernière. Pour chaque int déclaré, 4 octets sont réservés. Pour un long, c'est le double (8 octets). Ainsi, avec 1Mo de mémoire vive, il est possible de stocker 250 000 int contre seulement 125 000 long. Tout cela est donc une pure question d'économie de ressources.
[...] si int accepte les nombres Long [...]
Et non, les int n'acceptent pas les long. Seul l'inverse est vrai, puisqu'un long est plus long qu'un int, il peut les stocker. Si vous arrivez à stocker votre nombre dans un int, c'est simplement que votre nombre est trop petit pour être un long. Pour afficher le nombre maximal qu'accepte un type, vous pouvez utiliser type.MaxValue.
Exemple :
using System; class MainClass { public static void Main (string[] args) { Console.WriteLine ("Un int peut prendre une valeur comprise entre " + int.MinValue + " et " + int.MaxValue); Console.WriteLine ("Un long peut prendre une valeur comprise entre " + long.MinValue + " et " + long.MaxValue); } }
Voici ce que ce bout de code me retourne (sous Linux, avec Monodevelop) :
Maintenant, regardons ce qui se passe si l'on essaye de stocker un nombre supérieur à la valeur maximale que peut prendre chaque type :
Sous Monodevelop :
Et sous Visual Studio (ici, j'utilise la version Enterprise 2015, le message d'erreur est peut-être différent suivant la version que vous utilisez) :
Dans les deux logiciels, le programme ne compile pas, puisqu'un dépassement d'entier (également appelé integer overflow) se produit.
Voilà, j'espère avoir éclairé votre lanterne. Si vous avez d'autres questions, n'hésitez pas :).
RicoAceArmy
Messages postés
18
Date d'inscription
dimanche 16 août 2015
Statut
Membre
Dernière intervention
5 novembre 2016
5
17 août 2015 à 02:23
17 août 2015 à 02:23
Bonsoir,
Merci a vous deux pour ces réponses rapide est très bien développè !
Je comprend mieux maintenant pourquoi ces deux variables sont utiles !
Puisque je suis encore assez limité en programmation, le int est surement la seule variable que je vais utiliser pour le moment !
Mais vos informations sont précieuses, je m'en servirait surement dés que j'aurais un peu plus de connaissance et d'expérience !
Merci encore une fois !
Merci a vous deux pour ces réponses rapide est très bien développè !
Je comprend mieux maintenant pourquoi ces deux variables sont utiles !
Puisque je suis encore assez limité en programmation, le int est surement la seule variable que je vais utiliser pour le moment !
Mais vos informations sont précieuses, je m'en servirait surement dés que j'aurais un peu plus de connaissance et d'expérience !
Merci encore une fois !