Pascal hat zwei boolean typen, Boolean und die integer kompatiblen bools (longbool, bytebool, etc), und die verhalten sich unterschiedlich:
Code: Alles auswählen
WriteLn(Ord(Boolean(True))); // 1
WriteLn(Ord(LongBool(True))); // -1
WriteLn(Ord(ByteBool(True))); // -1
Beides hat vor und Nachteile, mit True = 1 kann man ganz nett rechnen (z.B. if b then x := a else x := 0 ist equivalent zu x := ord(b) * a).
-1 hat den vorteil das bitweise und logische operatoren identisch sind (logisches not von False ist True, bitwises not von 0 ist -1).
Aber auch wen es mal nützlich sein kann, im endeffekt ist es einfach verwirrender als hilfreich
siro hat geschrieben: Mo 19. Sep 2022, 01:55
warum es noch das Longbool gibt habe ich ehrlich gesagt nicht verstanden....ausser dass es nicht ein Byte sondern 4 Bytes benötigt....
Wozu braucht man das ?
Ist relativ nützlich, viele System APIs sind für C geschrieben, und dort gibt es kein Boolean typen, sondern es wird einfach int benutzt. Mal abgesehen von dem grauen das eigentlich C ints sind (da sie lediglich als mindestens 15 bit stellen definiert sind, also in praxis 16, 32 oder 64 bit groß sein können, und dann theoretisch auch noch 1er oder 2er complement oder sign und magnitude kodiert sein können), bedeutet das das wenn man mit den ergebnissen von C funktionen/APIs boolean rechnen möchte, ist es hilfreich die einfach in einen Longbool zu stecken statt immer ein <> 0 zu schreiben