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

Langage Delphi Discussion :

Types entiers génériques et Types entiers fondamentaux


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 115
    Points : 60
    Points
    60
    Par défaut Types entiers génériques et Types entiers fondamentaux
    Bonjour,

    Delphi me dit:

    Un type entier représente un sous-ensemble de l'ensemble des nombres. Les types entiers génériques sont Integer et Cardinal ; utilisez-les dans la mesure du possible car ils donnent de meilleures performances avec la CPU et le système d'exploitation utilisés. Le tableau suivant spécifie leur étendue et leur format de stockage pour le compilateur Delphi.
    Types entiers génériques

    Type Etendue Format Mappage de types .NET
    Integer -2147483648..2147483647 32 bits signé Int32
    Cardinal 0..4294967295 32 bits non signé UInt32

    Les types fondamentaux entiers sont Shortint, Smallint, Longint, Int64, Byte, Word et Longword.

    Types entiers fondamentaux

    Type Etendue Format Mappage de types .NET
    Shortint -128..127 8 bits signé SByte
    Smallint -32768..32767 16 bits signé Int16
    Longint -2147483648..2147483647 32 bits signé Int32
    Int64 -2^63..2^63-1 64 bits signé Int64
    Byte 0..255 8 bits non signé Byte
    Word 0..65535 16 bits non signé UInt16
    Longword 0..4294967295 32 bits non signé UInt32
    UInt64 0..2^64–1 64 bits non signé UInt64
    Bien sure je crois Dephi sur parole, donc j'utilise les types génériques.
    Mais quel est la différence entre ces types:

    Integer -2147483648..2147483647 32 bits signé Int32
    Longint -2147483648..2147483647 32 bits signé Int32
    et
    Cardinal 0..4294967295 32 bits non signé UInt32
    Longword 0..4294967295 32 bits non signé UInt32

    Je vais peut dire une bêtise:
    Générique = tous les langages de programmation?
    Fondamentaux = Delphi?
    ...

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 875
    Points : 11 365
    Points
    11 365
    Billets dans le blog
    6
    Par défaut
    en fait, un type fondamental est... typé alors qu'un type générique laisse au compilateur le soin de l'adapter à la plateforme :
    aujourd'hui, sous D5/W98 integer -> int32
    demain, sous D201?/W64bits integer -> int64

    l'utilisation des types génériques est plus performante (cf. aide de Delphi) car elle est plus portable, n'oblige pas le compilo à transtyper, respecte l'alignement natif des données pour le processeur, etc.

  3. #3
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    en d'autres termes

    LongInt est un entier signé sur 32bits depuis...Turbo Pascal ?

    Integer est passé de 16 à 32 bits avec Delphi 2, et devrait passer à 64bits dans la prochaine version.

    LongWord est un entier non signé sur 32 bits depuis...assez récemment dans l'histoire de Delphi avant ça n'existait pas !

    Cardinal a été introduit dans Delphi (?) et devrait passer à 64bits dans la prochaine version.

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 115
    Points : 60
    Points
    60
    Par défaut
    Merci de vos réponses.

    Mais si je comprend bien, au moment de la compilation, le compilateur va "adapter" le type. Donc si je fais mon application sous D2007/WXP 32 bits mais que l'application est destiné pour Win7/64Bits ? C'est pas typé efficacement ?

    Est ce que l'on peut contourner le problème avec le remote debugger?

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Citation Envoyé par Vilukariok Voir le message
    Merci de vos réponses.

    Mais si je comprend bien, au moment de la compilation, le compilateur va "adapter" le type. Donc si je fais mon application sous D2007/WXP 32 bits mais que l'application est destiné pour Win7/64Bits ? C'est pas typé efficacement ?

    Est ce que l'on peut contourner le problème avec le remote debugger?
    "adapter" n'est pas le terme "adapté"

    Jusqu'à présent et depuis Delphi 2, on est en 32bits, et Integer et Cardinal sont en 32 bits...même sous W7/64bits

    La prochaine version devrait proposer deux modes de compilation 32 et 64 bits, selon le mode la taille du type sera appliquée.

    En conséquence, tu ne dois indiquer ces types que quand leur taille t'importe peu...dans une boucle parcourant une liste, tu te fiche de savoir si l'index est sur 32 ou 64 bits, tu laisses donc le compilateur choisir. Mais si tu veux envoyer des données par Internet ou stocker dans un fichier, tu DOIS connaître la taille des données, donc tu dois utiliser des types fondamentaux sous peine d'incompatibilité du programme en fonction du mode de compilation.

  6. #6
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 875
    Points : 11 365
    Points
    11 365
    Billets dans le blog
    6
    Par défaut
    c'est exact ; mais si en plus un programme compilé sous win 32 est exécuté sous win 64, celui-ci utilisera les types natifs 32 bits et non ceux 64 bits, j'imagine

  7. #7
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Oui en effet.

  8. #8
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 173
    Points
    4 173
    Par défaut
    Citation Envoyé par Paul TOTH Voir le message
    Integer est passé de 16 à 32 bits avec Delphi 2, et devrait passer à 64bits dans la prochaine version.

    Cardinal a été introduit dans Delphi (?) et devrait passer à 64bits dans la prochaine version.
    Tu as des infos sur le sujet, ou ce n'est qu'une suposition ?

    Parce que je serais plutôt tanté de dire que ni l'integer ni le cardinal ne vont changer.
    L'implémentation du type générique est dépendant de la machine. En 16bits, l'entier faisait 16 bits. En 32 bits, l'entier fait 32 bits. En x64, l'entier fait....32 bits !
    Il n'y a que les adresses mémoires qui passent à 64bits. La taille par défaut des opérandes reste à 32bits.

  9. #9
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Euh non justement en x86_64 les entiers standard sont 64 bits... Ce qui fait que les pointeurs peuvent être 64 bits aussi.

  10. #10
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 457
    Points
    28 457
    Par défaut
    Au temps pour moi !

    les types entiers ne bougeront pas, deux nouveaux types NativeInt et NativeUInt sont introduits

    [ame="http://www.youtube.com/watch?v=pURHj1qKK_Y"]YouTube - ‪Delphi 64-bit Compiler Sneak Preview‬‏[/ame]

  11. #11
    Membre éclairé Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Points : 790
    Points
    790
    Par défaut
    Citation Envoyé par Franck SORIANO Voir le message
    Parce que je serais plutôt tanté de dire que ni l'integer ni le cardinal ne vont changer.
    C'est effectivement déjà le cas, tout du moins si l'on se réfère à Lazarus. Dans une application compilée en 64 bits, le SizeOf d'un Int64 retourne 8 (64 bits) et celui d'un Integer 4 (32 bits).

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 115
    Points : 60
    Points
    60
    Par défaut
    Merci beaucoup pour toutes vos réponses. J'ai appris bien plus que ce que j’espérais

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. un like d'un type entier avec un type string.
    Par charrynsasi dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/11/2009, 11h13
  2. préciser qu'un type générique est un entier (Int32, Int64)
    Par Benoit_T dans le forum Delphi .NET
    Réponses: 5
    Dernier message: 24/03/2009, 15h20
  3. Déclaration d'entier: Respecter le type exact ?
    Par tintin72 dans le forum Débuter
    Réponses: 27
    Dernier message: 15/11/2008, 18h01
  4. Conteneur générique et types des objets contenus
    Par bobuse dans le forum Langage
    Réponses: 4
    Dernier message: 12/04/2007, 11h59
  5. [Débutant] Génériques et types primitifs
    Par Djakisback dans le forum Langage
    Réponses: 16
    Dernier message: 25/05/2006, 11h03

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