มีประเภทบูลีนที่กำหนดไว้ล่วงหน้าสี่ประเภทใน Delphi: บูลีน, ByteBool, WordBool และ LongBool ในหมู่พวกเขาประเภทบูลีนเป็นประเภทบูลีนที่ต้องการและอีกสามประเภทที่เหลือให้การสนับสนุนความเข้ากันได้สำหรับภาษาการเขียนโปรแกรมอื่นและสภาพแวดล้อม Windows ประเภทบูลีนเหล่านี้ใช้ในลักษณะเดียวกันมาก แต่อาจมีผลลัพธ์ที่ไม่คาดคิดหากใช้สลับกัน
นี่คือการวิเคราะห์อย่างง่ายสำหรับการอ้างอิงของคุณ
1. การเปรียบเทียบจากมุมมองของการใช้ทรัพยากร
ข้อมูลประเภทบูลีนชิ้นหนึ่งใช้หน่วยความจำ 1 ไบต์
ข้อมูลประเภท ByteBool ชิ้นหนึ่งใช้หน่วยความจำ 1 ไบต์
ข้อมูลประเภท WordBool ชิ้นหนึ่งใช้หน่วยความจำ 2 ไบต์
ข้อมูลประเภท LongBool ใช้พื้นที่หน่วยความจำ 4 ไบต์
หากนักพัฒนาสร้างประเภทโครงสร้างที่มีชนิดข้อมูลบูลีนเมื่อออกแบบโปรแกรม จะต้องพิจารณาในแง่ของการใช้ทรัพยากร แม้ว่าชนิดข้อมูลเหล่านี้สามารถกำหนดซึ่งกันและกันได้ แต่ก็มีความแตกต่างในบางกรณีพิเศษ ดูข้อความต่อไปนี้ก่อน:
พิมพ์
ByteBoolFile = ไฟล์ของ ByteBool;
LongBoolFile = ไฟล์ของ LongBool;
ที่นี่หากเก็บค่าบูลีนจำนวนเท่ากันในไฟล์ทั้งสองประเภทนี้ ขนาดไฟล์จะแตกต่างกัน เมื่ออ่านข้อมูลจากไฟล์ฟิสิคัลเดียวกันตามไฟล์ทั้งสองประเภทนี้ ผลลัพธ์ที่ได้จะแตกต่างกันมากยิ่งขึ้น
ต่อไปนี้เป็นโปรแกรมที่เปรียบเทียบ ByteBool และ LongBool ขนาดไฟล์ของไฟล์ที่ได้รับ test1.bin และ test2.bin คือ 4 ไบต์ และ 16 ไบต์ ตามลำดับ
ขั้นตอนการเปรียบเทียบ ByteBoolWithLongBool;
ค่าคงที่
FName1 = 'c: est1.bin';
FName2 = 'c: est2.bin';
พิมพ์
ByteBoolFile = ไฟล์ของ ByteBool;
LongBoolFile = ไฟล์ของ LongBool;
var
BF: ByteBoolFile;
LF: LongBoolFile;
B: บูลีน;
เริ่ม
ข := เท็จ;
AssignFile(BF, FName1);
เขียนใหม่(BF);
เขียน(BF, B, B, B, B);
CloseFile(BF);
AssignFile(LF, FName2);
เขียนใหม่(LF);
เขียน(LF, B, B, B, B);
ปิดไฟล์(LF);
จบ;
เพื่อนที่สนใจสามารถเปรียบเทียบความแตกต่างในการอ่านข้อมูลบนพื้นฐานนี้ และคุณจะพบกับการค้นพบที่แปลกประหลาดมากขึ้น
2. การเปรียบเทียบจากมุมมองของการดำเนินการค่าบูลีน
ใน Delphi ค่าบูลีนสามารถกำหนดค่าได้เพียงค่าคงที่ที่กำหนดไว้ล่วงหน้าค่าใดค่าหนึ่งคือ True และ False ชนิดข้อมูลบูลีนสี่ชนิดข้างต้นมีความสัมพันธ์ดังต่อไปนี้:
บูลีนไบต์บูล, เวิร์ดบูล, ลองบูล
เท็จ < จริง เท็จ <> จริง
ลำดับ(เท็จ) = 0 ลำดับ(เท็จ) = 0
ออร์ด(จริง) = 1 ออร์ด(จริง) <> 0
สำเร็จ(เท็จ) = จริง สำเร็จ(เท็จ) = จริง
ที่คาด(จริง) = เท็จ ที่คาด(เท็จ) = จริง
ไม่ใช่เรื่องยากที่จะเห็นว่ามีการเรียงลำดับประเภทบูลีน ในขณะที่ประเภทข้อมูลบูลีนอีกสามประเภทนั้นไม่ได้เรียงลำดับ โปรแกรมต่อไปนี้แสดงให้เห็นถึงความแตกต่างบางประการเหล่านี้:
ขั้นตอน CompareBooleanWithLongBool;
var
B: บูลีน;
ปอนด์: ลองบูล;
เริ่ม
ข := เท็จ;
ปอนด์ := เท็จ;
ถ้า Ord(B) = Ord(LB) แล้ว
ShowMessage('Ord(B) = Ord(LB) [B = LB = False]') //จะถูกดำเนินการ
อื่น
ShowMessage('Ord(B) <> Ord(LB) [B = LB = False]');
ข := จริง;
ปอนด์ := จริง;
ถ้า 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
จบ;