Delphi에는 Boolean, ByteBool, WordBool 및 LongBool이라는 네 가지 사전 정의된 부울 유형이 있습니다. 그중 Boolean 유형이 선호되는 Boolean 유형이며 나머지 3개는 다른 프로그래밍 언어 및 Windows 환경에 대한 호환성 지원을 제공합니다. 이러한 부울 유형은 거의 동일한 방식으로 사용되지만, 서로 바꿔서 사용할 경우 예상치 못한 결과가 발생할 수 있습니다.
참고할 수 있는 간단한 분석은 다음과 같습니다.
1. 자원 활용 측면에서의 비교
Boolean 유형의 데이터 조각은 1바이트의 메모리를 차지합니다.
ByteBool 유형 데이터는 1바이트의 메모리를 차지합니다.
WordBool 유형 데이터는 2바이트의 메모리를 차지합니다.
LongBool 유형의 데이터는 4바이트의 메모리를 차지합니다.
개발자가 프로그램을 설계할 때 Boolean 데이터 유형을 포함하는 구조 유형을 구성하는 경우 리소스 사용 측면에서 고려 사항이 있습니다. 이러한 데이터 유형은 서로 할당될 수 있지만 일부 특수한 경우에는 차이가 있습니다. 먼저 다음 진술을 살펴보십시오.
유형
ByteBoolFile = ByteBool 파일;
LongBoolFile = LongBool 파일;
여기서, 이 두 종류의 파일에 같은 개수의 부울 값이 저장되면 파일 크기가 다릅니다. 이 두 가지 파일 유형에 따라 동일한 실제 파일에서 데이터를 읽을 때 결과는 훨씬 더 다릅니다.
다음은 ByteBool과 LongBool을 비교하는 프로그램입니다. 가져온 파일 test1.bin과 test2.bin의 파일 크기는 각각 4바이트와 16바이트입니다.
PRocedure CompareByteBoolWithLongBool;
const
FName1 = 'c: est1.bin';
FName2 = 'c: est2.bin';
유형
ByteBoolFile = ByteBool 파일;
LongBoolFile = LongBool 파일;
var
BF: 바이트불파일;
LF: LongBool파일;
B: 부울;
시작하다
B := 거짓;
AssignFile(BF, FName1);
다시 쓰기(BF);
쓰기(BF, B, B, B, B);
닫기파일(BF);
AssignFile(LF, FName2);
다시 쓰기(LF);
쓰기(LF, B, B, B, B);
닫기파일(LF);
끝;
관심 있는 친구들은 이를 바탕으로 데이터 읽기의 차이를 비교할 수 있으며, 더욱 특이한 발견을 발견하게 될 것입니다.
2. 불리언 값 연산 관점에서의 비교
Delphi에서는 불리언 값에는 미리 정의된 상수 True 및 False 중 하나만 할당될 수 있습니다. 위의 네 가지 부울 데이터 유형은 다음과 같은 관계를 갖습니다.
부울 ByteBool, WordBool, LongBool
거짓 < 참 거짓 <> 참
Ord(거짓) = 0 Ord(거짓) = 0
Ord(참) = 1 Ord(참) <> 0
Succ(거짓) = 참 Succ(거짓) = 참
Pred(참) = 거짓 Pred(거짓) = 참
부울 유형은 순서가 있는 반면 다른 세 가지 부울 데이터 유형은 순서가 없는 것을 보는 것은 어렵지 않습니다. 다음 프로그램은 이러한 차이점 중 일부를 보여줍니다.
절차 CompareBooleanWithLongBool;
var
B: 부울;
LB: 롱부울;
시작하다
B := 거짓;
LB := 거짓;
Ord(B) = Ord(LB)이면
ShowMessage('Ord(B) = Ord(LB) [B = LB = False]') //실행됩니다.
또 다른
ShowMessage('Ord(B) <> Ord(LB) [B = LB = False]');
B := 참;
LB := 참;
Ord(B) = Ord(LB)이면
ShowMessage('Ord(B) = Ord(LB) [B = LB = True]')
또 다른
ShowMessage('Ord(B) <> Ord(LB) [B = LB = True]'); //실행됩니다.
ShowMessage('Ord(B) = ' + IntToStr(Ord(B))); //1이어야 합니다.
ShowMessage('Ord(LB) = ' + IntToStr(Ord(LB))); //-1일 수 있음
끝;