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

Free Pascal Discussion :

Usage du type ByteBool [Free Pascal]


Sujet :

Free Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 167
    Billets dans le blog
    9
    Par défaut Usage du type ByteBool
    Bonjour !

    Passant de Turbo-Pascal à Free-Pascal, je découvre les possibilités offertes par ce dernier.
    Ainsi je voudrais bien utiliser le type ByteBool, mais le code que j'essaie ne marche pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var bb: ByteBool;
    begin
      bb := 1;
    end.
    Le compilateur me fait savoir qu'il a trouvé un "ShortInt" là où il s'attendait à un "ByteBool".

    En relisant le manuel, je ne vois toujours pas mon erreur.

    Free Pascal also supports the ByteBool, WordBool and LongBool types. These are of type Byte, Word or Longint, but are assignment compatible with a Boolean: the value False is equivalent to 0 (zero) and any nonzero value is considered True when converting to a boolean value.

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Pas essayé, mais je suppose, que l'assignation en fonctionne qu'avec True et False. Par contre, dans l'évaluation d'expressions, le compilateur doit comparer si la valeur est 0 (équivalent sémantiquement à False) ou autre (équivalent à True).

  3. #3
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 167
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par wormful_sickfoot Voir le message
    Pas essayé, mais je suppose, que l'assignation en fonctionne qu'avec True et False. Par contre, dans l'évaluation d'expressions, le compilateur doit comparer si la valeur est 0 (équivalent sémantiquement à False) ou autre (équivalent à True).
    Mais la valeur, il faut bien l'assigner à un moment ou à un autre, non ?

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Ben oui, quand tu fais bb:= True ou bb := False. Si tu veux assigner un nombre à une variable c'est pas un type booléen qu'il faut utiliser, mais un type entier.

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 167
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par wormful_sickfoot Voir le message
    Ben oui, quand tu fais bb:= True ou bb := False. Si tu veux assigner un nombre à une variable c'est pas un type booléen qu'il faut utiliser, mais un type entier.
    D'accord, mais dans ce cas quelle différence entre un ByteBool et un Boolean ?

    J'ai fini par trouver un exemple. Ce serait une sorte de type-fonction (?). Mais même en admettant cela, les résultats sont étranges.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    var
      bb: bytebool;
    begin
      bb := False;
     
      bb := bytebool(3);
     
      writeln(bb);                      // TRUE
     
      writeln(bytebool(3));             // TRUE
     
      if bb then writeln('OK');         // OK
     
      if bytebool(3) then writeln('OK');// Rien !
     
      readln;
    end.

  6. #6
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 466
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    La doc FreePascal dit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Name 	Size	Ord(True)
     
    Boolean 	1 	1
    ByteBool 	1 	Any nonzero value
    WordBool	2 	Any nonzero value
    LongBool 	4 	Any nonzero value
    Les types ByteBool, WordBool et LongBool stockent des variables booléennes surtout 1 ou plusieurs octets. Mais ca reste du booléen, donc les valeurs acceptables sont True ou False.

    Il se trouve que FreePascal introduit la possibilité qu'une variable numérique soit transtypées en booléen, auquel cas, si la valeur numérique est différente de 0, la variable booléenne prendra True, sinon elle prendra False. Ce comportement se rapproche du C.

    La notation que tu utilises dans l'exemple s'appelle transtypage, cela permet de changer le type d'une variable dans la durée d'une instruction. Tous les types (de bases) peuvent être utilisés pour un transtypage.

    Grâce à ce code, tu signale au compilateur de convertir la valeur numérique 3 en ByteBool... Comme 3 <>0 alors bb prend la valeur True.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/06/2014, 10h08
  2. programmation corba: le type "sequence"
    Par Kali dans le forum CORBA
    Réponses: 4
    Dernier message: 28/08/2005, 16h09
  3. Réponses: 2
    Dernier message: 05/06/2002, 12h29
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36

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