AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TRUE/FALSE Part

Ein Thema von EWeiss · begonnen am 30. Mär 2015 · letzter Beitrag vom 2. Apr 2015
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.654 Beiträge
 
Delphi 12 Athens
 
#1

AW: TRUE/FALSE Part

  Alt 2. Apr 2015, 09:42
Die einzige in allen Sprachen konstante Weisheit ist: false = 0
Ich bleibe bei meiner Meinung, dass dies sprachlich nicht richtig ist.
Da gebe ich dir Recht. Korrekt müsste es heißen: Was der Delphi-Programmierer false nennt, ist für die CPU eine 0.


Und ich glaube an die Macht des Debuggers, der mir bestätigt, das "False" eben nicht 0 ist.
Der Debugger macht hier das genaue Gegenteil des Compilers und übersetzt die Werte im Speicher in für Delphi-Programmierer lesbare Bezeichner.

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:
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
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.

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 interne Darstellung von false ist 0
  • die interne Darstellung von true ist 1
  • bei einem if <Boolean> then wird auf not false geprüft
  • bei einem if (<Boolean> = <Boolean>) then wird auf Gleichheit der internen Darstellung geprüft

Die beiden ersten Punkte sind übrigens auch sinngemäß in der Delphi-Dokumentation nachzulesen:

Zitat:
Ein Boolean-Wert gilt als True, wenn seine Ordinalposition 1 ist, und als False, wenn seine Ordinalposition 0 (Null) ist.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#2

AW: TRUE/FALSE Part

  Alt 2. Apr 2015, 10:07
Die einzige in allen Sprachen konstante Weisheit ist: false = 0
Ich bleibe bei meiner Meinung, dass dies sprachlich nicht richtig ist.
Da gebe ich dir Recht. Korrekt müsste es heißen: Was der Delphi-Programmierer false nennt, ist für die CPU eine 0.
Na wenigstens einer der mich versteht.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TRUE/FALSE Part

  Alt 2. Apr 2015, 10:20
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?
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#4

AW: TRUE/FALSE Part

  Alt 2. Apr 2015, 10:22
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?
Habe ein Feedback gestellt damit der Thread geschlossen wird.
Wenn ich es selbst könnte hätte ich es nach der ersten Seite schon getan.
Da war meine Frage schon beantwortet.

gruss
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:40 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