![]() |
AW: TRUE/FALSE Part
Okay BadenPower:
Delphi-Quellcode:
Was steht jetzt für B im Speicher?
var
B: Boolean; begin B := false; end; 00000000 oder 000false ? (Kleiner Tipp: Ein Bit kann nur den Zustand 1 oder 0 annehmen) |
AW: TRUE/FALSE Part
Zitat:
Und einer Bitfolge siehst Du halt nicht an, was es letztendlich darstellen soll. |
AW: TRUE/FALSE Part
Zitat:
Zitat:
Netterweise bietet Delphi ja eine Funktion, mit der man die internen Werte beliebiger Aufzählungstypen auch in Delphi ermitteln kann: Ord() Im Gegensatz zu anderen Funktionen ändert Ord nämlich nicht die interne Darstellung sondern ist eher mit einem Hardcast vergleichbar, der einzig dafür da ist, den Compiler zu überreden einen Wert (false oder true) als einen anderen Typ zu betrachten, als der er deklariert ist (hier ein Boolean als Byte). Noch klarer wird es, wenn man sich mal das Assemblerlisting beider Vergleiche ansieht:
Delphi-Quellcode:
Im ersten Fall wird mit 0 verglichen und im Erfolgsfall gesprungen. Der then-Teil wird also nur ausgeführt, wenn der Vergleich mit 0 fehlschlägt.
Project16.dpr.22: if B then begin
004D28F1 807DFF00 cmp byte ptr [ebp-$01],$00 004D28F5 742D jz $004d2924 Project16.dpr.29: if B = true then begin 004D294F 807DFF01 cmp byte ptr [ebp-$01],$01 004D2953 752D jnz $004d2982 Beim zweiten Fall wird aber mit 1 verglichen und im Fehlerfall gesprungen. Damit wird der then-Teil nur ausgeführt, wenn der Vergleich mit 1 erfolgreich ist. Fazit:
Die beiden ersten Punkte sind übrigens auch sinngemäß in der Delphi-Dokumentation nachzulesen: Zitat:
|
AW: TRUE/FALSE Part
Zitat:
|
AW: TRUE/FALSE Part
Bei allem Respekt, meine Herren - aber ein bisschen "nerdig" ist es schon, sich fünf Seiten lang über sprachliche Spitzfindigkeiten von boolschen Werten auszuschauen.
Grundsätzlich bin ich ein Freund der korrekten Sprache und halte eine präzise Ausdrucksweise auch für hilfreich, aber irgendwann langt's doch mal, oder? |
AW: TRUE/FALSE Part
Zitat:
Wenn ich es selbst könnte hätte ich es nach der ersten Seite schon getan. Da war meine Frage schon beantwortet. gruss |
AW: TRUE/FALSE Part
Zitat:
Es liegt einfach daran, daß es einen speziellen Debughelper gibt, welcher den Wert des Boolean-Typen interpretiert und entsprechend anzeigt. Dabei wird der Boolean "korrekt" ausgewertet und nicht einfach nur angezeigt. Man könnte sich jetzt streiten, ob er hier nicht vielleicht besser ein "True (2)" anzeigen sollte, aber wer will, kann das bei sich gern ändern.
Delphi-Quellcode:
var
B: Boolean; A: TAlignLayout; begin B := True; // True B := Boolean(2); // True A := TAlignLayout.Top; // Top A := TAlignLayout(99); // (außerhalb des zulässigen Bereichs) 99 if B then ; if A = TAlignLayout.Top then ; if A = 99 then ; // das mag der Compiler auch nicht, obwohl es "intern" 99 ist |
AW: TRUE/FALSE Part
Zitat:
lg Caps |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz