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
Bonjour,

Je suis actuellement entrain de suivre un cours pour apprendre a programmer en C#

Je suis un débutant et je n'ai aucune expérience !

Je voudrais savoir pourquoi on utilise int alors qu'on pourrait toujours utiliser long ?

Je m'explique, Int est une variable pour un nombre entier court ( 231 )

Long est une variable pour un nombre entier long ( 555111333222 )

Je suis sur Visual studio, j'ai fait les expériences suivantes :

------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int Elfy = 1500; ( J'ai fait la manip avec 200 )
Console.WriteLine(Elfy);
Console.ReadKey();
}
}
}
-----------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Long Elfy = 1500; ( J'ai fait la même manip avec 200 )
Console.WriteLine(Elfy);
Console.ReadKey();
}
}
}
----------------------------------

Pas d'erreur, et pas d'avertissement, donc si int accepte les nombres Long et inversement pour Long, pourquoi utiliser ces deux variables lorsqu'on peux utiliser qu'une seule !

Merci d'avance pour vos réponses,
je penses que les programmeurs éxpérimentés vont rire en voyant cette question mais bon je commence tout juste a m'initier a la programmation ^^

Cordialement, Rico.
A voir également:

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
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"
0
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
Bonjour,

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 :).
0
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
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 !
0