Il existe quatre types booléens prédéfinis dans Delphi : Boolean, ByteBool, WordBool et LongBool. Parmi eux, le type booléen est le type booléen préféré, et les trois autres offrent une prise en charge de la compatibilité pour d'autres langages de programmation et environnements Windows. Ces types booléens sont utilisés de la même manière, mais peuvent avoir des résultats inattendus s'ils sont utilisés de manière interchangeable.
Voici une analyse simple pour votre référence.
1. Comparaison du point de vue de l'utilisation des ressources
Une donnée de type booléen occupe 1 octet de mémoire ;
Une donnée de type ByteBool occupe 1 octet de mémoire ;
Une donnée de type WordBool occupe 2 octets de mémoire ;
Une donnée de type LongBool occupe 4 octets de mémoire.
Si le développeur construit un type de structure contenant un type de données booléen lors de la conception d'un programme, des considérations seront prises en compte en termes d'utilisation des ressources. Bien que ces types de données puissent être attribués les uns aux autres, il existe des différences dans certains cas particuliers. Regardez d’abord la déclaration suivante :
taper
ByteBoolFile = fichier de ByteBool ;
LongBoolFile = fichier de LongBool ;
Ici, si le même nombre de valeurs booléennes sont stockées dans ces deux types de fichiers, leurs tailles de fichiers sont différentes. Lors de la lecture des données d'un même fichier physique selon ces deux types de fichiers, les résultats sont encore plus différents.
Ce qui suit est un programme qui compare ByteBool et LongBool. Les tailles de fichier des fichiers obtenus test1.bin et test2.bin sont respectivement de 4 octets et 16 octets.
PProcédure CompareByteBoolWithLongBool ;
const
FName1 = 'c: est1.bin';
FName2 = 'c: est2.bin';
taper
ByteBoolFile = fichier de ByteBool ;
LongBoolFile = fichier de LongBool ;
var
BF : ByteBoolFile ;
LF : LongBoolFichier ;
B : booléen ;
commencer
B := Faux ;
AssignFile(BF, FName1);
Réécrire(BF);
Écrire(BF, B, B, B, B);
FermerFichier(BF);
AssignFile(LF, FName2);
Réécrire(LF);
Écrire (LF, B, B, B, B);
FermerFichier(LF);
fin;
Les amis intéressés peuvent comparer les différences de lecture des données sur cette base et vous découvrirez des découvertes plus particulières.
2. Comparaison du point de vue des opérations sur les valeurs booléennes
Dans Delphi, les valeurs booléennes ne peuvent se voir attribuer qu'une des constantes prédéfinies True et False. Les quatre types de données booléens ci-dessus ont la relation suivante :
Booléen ByteBool, WordBool, LongBool
Faux < Vrai Faux <> Vrai
Ord(Faux) = 0 Ord(Faux) = 0
Ord(Vrai) = 1 Ord(Vrai) <> 0
Succ(Faux) = Vrai Succ(Faux) = Vrai
Pred(Vrai) = Faux Pred(Faux) = Vrai
Il n'est pas difficile de voir que le type booléen est ordonné, tandis que les trois autres types de données booléens ne sont pas ordonnés. Le programme suivant illustre certaines de ces différences :
procédure CompareBooleanWithLongBool ;
var
B : booléen ;
LB : LongBool ;
commencer
B := Faux ;
LB := Faux;
si Ord(B) = Ord(LB) alors
ShowMessage('Ord(B) = Ord(LB) [B = LB = False]') //sera exécuté
autre
ShowMessage('Ord(B) <> Ord(LB) [B = LB = False]');
B := Vrai ;
LB := Vrai ;
si Ord(B) = Ord(LB) alors
ShowMessage('Ord(B) = Ord(LB) [B = LB = Vrai]')
autre
ShowMessage('Ord(B) <> Ord(LB) [B = LB = True]' //sera exécuté
ShowMessage('Ord(B) = ' + IntToStr(Ord(B))); //Doit être 1
ShowMessage('Ord(LB) = ' + IntToStr(Ord(LB))); //peut être -1
fin;