IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

Type primitif (int, bool) ou type du CTS (Int32, Boolean)


Sujet :

Dotnet

  1. #1
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut Type primitif (int, bool) ou type du CTS (Int32, Boolean)
    Bonjour,

    J'aimerais savoir quel est la meilleure solution; utiliser un type primitif (int) ou utiliser un type du CTS (Int32).

    Quels sont les avantages / inconvénients ?


    Yoshio

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Points : 627
    Points
    627
    Par défaut
    Salut,

    c'est la meme chose. =)

    Extract du standard :

    C# provides a set of predefined struct types called the simple types. The simple types are identified through reserved words, but these reserved words are simply aliases for predefined struct types in the System namespace, as described in the table below.
    Idem pour string (System.String) et object (System.Object).

  3. #3
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Je ne pense pas qu'un int prenne la même place en mémoire qu'un Int32.

  4. #4
    Rédacteur
    Avatar de The_badger_man
    Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2005
    Messages
    2 745
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 745
    Points : 8 538
    Points
    8 538
    Par défaut
    int est un alias pour System.Int32 (tout comme bool l'est pour Boolean, long pour Int64, etc.).

    int i;
    System.Int32 i;

    ces 2 déclarations sont identiques (au niveau rapidité, execution, espace mémoire occupé). La diférence est que la 2eme est moins utilisée car plus longue à écrire...

    Cela correspond dans les deux cas à une variable entière codée sur 32bits.
    Les règles du forum
    Le trio magique : FAQ + Cours + fonction rechercher
    Mes articles
    Pas de questions par messages privés svp

    Software is never finished, only abandoned.

  5. #5
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    En général je dirai la chose suivante : si vous avez à tout prix besoin de vous assurer qu'un int fait bien 32 bits, utilisez Int32 (cas d'une correspondance avec une colonne de base de données).

    Sans cette contrainte, utilisez un int. Pourquoi en fait? Et bien pour le moment int map vers Int32, je ne suis pas sûr que lorsque les systèmes 64 bits se seront imposés ce int ne sera pas tout d'un coup un Int64 pour des raisons de performances.

    Il y a eu des exemples de ce genre de choses en C++ avec le passage de 16 à 32bits, d'ou l'utilisation massive de typedef dans certains frameworks.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2005
    Messages : 700
    Points : 780
    Points
    780
    Par défaut
    Non, Non, Non...

    Int32 = int
    "Int32" est I-DEN-TI-QUE à "int" en processeur 32 / 64 / 1024 bits...

    Int32 = int
    C'est un allias, lors de la compil int devient Int32 et fera TOU-JOURS 32 bits...
    Tout comme long sera toujours un Int64...

    Je comprend pas pourquoi certains cherche tant la complexité...

    Vous pensiez quand même pas que Microsoft allait laisser cette histoire de 32 bits passé en 64 en fonction de la plateforme cible?...
    Ils ont définit les types et les allias ainsi, ils ne vont pas changer à l'avenir par pur craprice...

    Surtout que le framework entier est définit ainsi :

    public static int Parse(string s)
    Member of System.Int32

    Summary:
    Converts the string representation of a number to its 32-bit signed integer equivalent.

  7. #7
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Vous pensiez quand même pas que Microsoft allait laisser cette histoire de 32 bits passé en 64 en fonction de la plateforme cible?...
    Ils ont définit les types et les allias ainsi, ils ne vont pas changer à l'avenir par pur craprice...
    Allez dire ça à ceux qui ont fait du C++ et qui se demandent pourquoi un long fait seulement 4 octets (taille d'un int). Et oui, un beau jour, un int fut ce qui est aujourd'hui un short, et un long fut ce qui est aujourd'hui un int.

    Me méfier de ce genre de chose est une habitude et une précaution que j'ai prise depuis cette époque, navré si cela vous choque à ce point.

  8. #8
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par _skip Voir le message
    Allez dire ça à ceux qui ont fait du C++ et qui se demandent pourquoi un long fait seulement 4 octets (taille d'un int). Et oui, un beau jour, un int fut ce qui est aujourd'hui un short, et un long fut ce qui est aujourd'hui un int.
    Justement en C++ un int est défini en fonction du bon vouloir de la platforme sur laquelle il tourne. Il pourra donc avoir une taille variable si on change de platforme, et c'est justement pour celà qu'avec le framework un int a été définis comme un entier signé de 32 bits, point barre. Ce choix est donc lié à tous les problèmes qu'il y a eu avec la taille des nombres en C++ et donc les gars de Microsoft ne sont pas prêt d'en changer ... un int en C# fait la même taille sur Windows ( .NET Framework ), Linux ( Mono ) et Mac ( Mono ? ) quelque soit l'architecture des procésseurs utilisés.

  9. #9
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Je vous posait cette question car mon prof m'a dit que un int n'était pas tout à fait pareille qu'un Int32. Me demandez plus ce qu'il a dit j'en sais plus rien.

    Mais bon j'ai fait quelque recherche sur le net et ils disent tous la même chose, un int est pareille qu'un Int32.

  10. #10
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Si il a dit que le int était un type primitif et le Int32 un type objet (ou boxé), c'est faux.
    Et c'est une erreur qu'on voit souvent de la part de ceux qui viennent du monde java dans lequel il existe un int et une classe Integer qui sont effectivement des choses différentes.

  11. #11
    Rédacteur
    Avatar de Yoshio
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 732
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 732
    Points : 2 853
    Points
    2 853
    Par défaut
    Non il ne m'a pas sépcialement dit ca, la c'est moi qui cherchait 2 appellations différentes pour les différencier.

  12. #12
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    mon prof m'a dit que un int n'était pas tout à fait pareille qu'un Int32
    Change de prof
    En C# c'est exactement la même chose. En C++/CLI (ou C++ managé) je pense que ça correspond à l'int "natif", de taille variable selon la plateforme. Mais sous Windows c'est toujours 32 bits je pense...

  13. #13
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Mais sous Windows c'est toujours 32 bits je pense...
    En C++ ? Sur Windows 32 bits ou 64 bits ?

  14. #14
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    les 2 je crois...
    Citation Envoyé par MSDN
    For 32-bit and 64-bit compilers, Microsoft Visual C++ recognizes the types shown in the table below. Note that the following type also have unsigned forms:

    int (unsigned int)
    __int8 (unsigned __int8)
    __int16 (unsigned __int16)
    __int32 (unsigned __int32)
    __int64 (unsigned __int64)
    short (unsigned short)
    long (unsigned long)
    long long (unsigned longlong)

    Type Name.....Bytes
    int................4
    ...

  15. #15
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Ouai bon, même si on ne fait pas du C++ :
    http://msdn.microsoft.com/library/fr...o64bitcode.asp
    En C++ sur Windows un int et un long font tous les deux 32 bits alors qu'en C# un int c'est 32 et un long 64 ... il faut être fou pour faire du C++

  16. #16
    Expert éminent
    Avatar de _skip
    Homme Profil pro
    Développeur d'applications
    Inscrit en
    Novembre 2005
    Messages
    2 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur d'applications
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 898
    Points : 7 752
    Points
    7 752
    Par défaut
    Si vous osez parier que dans 10 ans le int de base fera toujours 32bits, j'envie votre confiance.

  17. #17
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Citation Envoyé par _skip Voir le message
    Si vous osez parier que dans 10 ans le int de base fera toujours 32bits, j'envie votre confiance.
    Je comprends ta crainte, mais si C++ pour des raisons historique (langage proche de la machine destiné à être très portable, contraintes issues du C) a des définitions imprécises des types de base, C# connait précisément la machine sur laquelle il tourne : la CLR. Donc j'imagine mal moi aussi le int changer de taille à moyen terme. Un Int128 ou Int256 apparaîtra peut être un jour, mais les alias n'ont pas de raison de changer. (byte, short, int, long, supralong, petralong ?)
    Mais bon le propre des tuiles imprévisbles est justement d'arriver sans prévenir, restons méfiants
    ಠ_ಠ

  18. #18
    Membre habitué Avatar de TSalm
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    361
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 361
    Points : 177
    Points
    177
    Par défaut
    Citation Envoyé par smyley Voir le message
    Ouai bon, même si on ne fait pas du C++ :
    http://msdn.microsoft.com/library/fr...o64bitcode.asp
    En C++ sur Windows un int et un long font tous les deux 32 bits alors qu'en C# un int c'est 32 et un long 64 ... il faut être fou pour faire du C++
    "être fou de faire du C++ est discutable" Les pgms C++ seront toujours plus rapides que des pgm équivalent en C# Et ceci parce que les développeurs C++ seront toujours plus proche de la machine que les C#istes. Il reste qu'il y a des bibs C++ qui gérent très bien les types portables. Et puis, au moins, C++ a plus de chance d'être portable que C#.net si on fait un petit effort non mais hé (je ne parle évidemment pas du C++ CLI...)

  19. #19
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par TSalm Voir le message
    "être fou de faire du C++ est discutable"
    Je précise que je trouve les programmeurs C++ fous mais que je les respecte comme des Dieux

    Citation Envoyé par TSalm Voir le message
    Les pgms C++ seront toujours plus rapides que des pgm équivalent en C#
    Ce que tu dit n'est pas forcément vrai, il arrive parfois que le C# valle le C++ surtout grâce au JIT. En même temps en programmant en C++ on est aussi plus proche des crash et autres erreurs de pointeurs. Donc le développement d'une application en C# prend globallement moins de temps que la même en C++, même si le C++ reste puissant par sa possibilité d'atteindre toutes les parties de la machine sans restriction. Pour ce qui est de la vitesse pure, c'est le C qui est roi.

    Citation Envoyé par TSalm Voir le message
    Et puis, au moins, C++ a plus de chance d'être portable que C#.net si on fait un petit effort non mais hé (je ne parle évidemment pas du C++ CLI...)
    Tu connais Mono ? tu peut faire du C#, utiliser "un peut" les WinForms ou faire du GTK# et ton programme compilé sur Windows ou Linux s'exécute sur Windows et Linux ...

  20. #20
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Pour ce qui est de la vitesse pure, c'est le C qui est roi.
    Si on va par là, ce serait plutôt l'assembleur le roi

Discussions similaires

  1. [WMI] Variant de type Unsigned Int 64 ...
    Par phplive dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 09/05/2006, 20h15
  2. Réponses: 3
    Dernier message: 07/02/2006, 22h18
  3. Réponses: 9
    Dernier message: 06/07/2005, 14h20
  4. [info] passer d'un type primitif a String
    Par soad dans le forum Langage
    Réponses: 3
    Dernier message: 08/05/2005, 13h19
  5. [prog dynamique]Constructeur avec type primitif
    Par -=Spoon=- dans le forum Langage
    Réponses: 2
    Dernier message: 16/12/2004, 10h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo