|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 687 ![]() |
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 :
En relisant le manuel, je ne vois toujours pas mon erreur. Citation:
__________________
L'Art est long et le Temps est court. |
|||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : avril 2002 Messages : 2 275 ![]() |
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).
__________________
M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal |
|
|
00
|
|
|
#3 | |
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 687 ![]() |
Citation:
__________________
L'Art est long et le Temps est court. |
|
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : avril 2002 Messages : 2 275 ![]() |
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.
__________________
M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal |
|
|
00
|
|
|
#5 | |||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 687 ![]() |
Citation:
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 :
__________________
L'Art est long et le Temps est court. |
|||
|
|
00
|
|
|
#6 | ||
![]() ![]() Inscription : avril 2002 Messages : 2 275 ![]() |
La doc FreePascal dit:
Code :
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.
__________________
M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal |
||
|
|
20
|
|
|
#7 | |
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 687 ![]() |
Citation:
__________________
L'Art est long et le Temps est court. |
|
|
|
00
|
|
|
#8 | ||
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 687 ![]() |
Ça m'embête un peu de laisser la discussion dans cet état, parce que franchement, je ne trouve pas qu'elle soit résolue.
D'abord il y a toujours le problème que j'ai signalé plus haut : Code :
if bytebool(3) then writeln('OK');// Rien ! Et à quoi bon même "transtyper" si au bout du compte il ne s'agit que de faire ceci : Code :
__________________
L'Art est long et le Temps est court. |
||
|
|
00
|
|
|
#9 |
![]() ![]() Inscription : avril 2002 Messages : 2 275 ![]() |
Pour la première question, le transtypage ce n'est pas vraiment une fonction, juste une écriture. Après l'utiliser tel quel dans une comparaison, c'est peut-être un bug de FreePascal, mais ca n'a pas forcément un sens. Avis aux experts...
La seule différence à mes yeux entre Boolean et ByteBool, c'est les valeurs qui vérifient la condition True. Selon la doc, pour boolean c'est uniquement 1, pour les autres ce sont toutes les valeurs différentes de 0. Mais ca reste un booléen, donc les valeurs possibles sont True ou False lors de l'assignation.
__________________
M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal |
|
|
00
|
|
|
#10 | |
|
Membre Expert
![]() ![]() Roland ChastainInscription : décembre 2011 Messages : 687 ![]() |
Citation:
Le problème, c'est qu'on ne trouve pas d'exemple de la bonne façon de l'utiliser. Enfin, on ne va pas passer l'année là-dessus. De toute façon, j'ai renoncé à m'en servir. J'aime mieux utiliser du bon vieux langage que tous les compilateurs connaissent.
__________________
L'Art est long et le Temps est court. |
|
|
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 421 ![]() |
Bonjour,
je pense que la différence essentielle entre Boolean et ByteBool c'est que seul le ByteBool est assurément sur 1 octet...Boolean l'est sûrement aussi mais ce n'est pas garanti.
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
00
|
|
|
#12 |
![]() ![]() ![]() |
Bonjour,
D'une manière plus générale et sans vouloir critiquer, dans la mesure où les processeurs 32 et, surtout, 64 bits génèrent des instructions plus longues et nécessitant parfois plus de cycles lorsqu'ils doivent manipuler des variables de 1 ou 2 octets, quel est objectivement l'intérêt de travailler avec des types tels que byte, bytebool, smallint, smallword, etc ?
__________________
Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell] |
|
10
|
|
|
#13 |
|
Membre éprouvé
![]() Inscription : janvier 2010 Messages : 223 ![]() |
A ma connaissance ByteBool, WordBool et LongBool ont été introduit pour faciliter l'interfaçage (ça se dit ça ?) avec le C. Dans un programme pur pascal il vaut mieux utiliser Boolean.
|
|
|
00
|
|
|
#14 | |
|
Expert Confirmé Sénior
![]() ![]() Paul TOTHFreelance Inscription : novembre 2002 Messages : 4 421 ![]() |
Citation:
__________________
Developpez.com: Mes articles, forum FlashPascal Entreprise: Execute SARL Produits : UPnP, RemoteOffice, FlashPascal Embarcadero : Ile de la Réunion, Dephi, C++Builder, RADPHP...TVA à 8,5% |
|
|
10
|
|
|
#16 | |
|
Expert Confirmé
![]() ![]() Inscription : août 2006 Messages : 3 417 ![]() |
Nua,
Citation:
__________________
Il court en ce moment une espèce de grippe, mais elle ne court pas très vite, car on peut l'attraper sans courir. |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com