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
Seite 5 von 5   « Erste     345   
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#41

AW: TRUE/FALSE Part

  Alt 2. Apr 2015, 10:11
Okay BadenPower:

Delphi-Quellcode:
var
  B: Boolean;
begin
  B := false;
end;
Was steht jetzt für B im Speicher?

00000000

oder

000false

? (Kleiner Tipp: Ein Bit kann nur den Zustand 1 oder 0 annehmen)
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
BadenPower

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

AW: TRUE/FALSE Part

  Alt 2. Apr 2015, 10:17
(Kleiner Tipp: Ein Bit kann nur den Zustand 1 oder 0 annehmen)
Ein String besteht auch nur aus 0 und 1.

Und einer Bitfolge siehst Du halt nicht an, was es letztendlich darstellen soll.
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.

Geändert von BadenPower ( 2. Apr 2015 um 10:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TRUE/FALSE Part

  Alt 2. Apr 2015, 10: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
 
#44

AW: TRUE/FALSE Part

  Alt 2. Apr 2015, 11: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
 
#45

AW: TRUE/FALSE Part

  Alt 2. Apr 2015, 11: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
 
#46

AW: TRUE/FALSE Part

  Alt 2. Apr 2015, 11: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
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#47

AW: TRUE/FALSE Part

  Alt 2. Apr 2015, 11:28
Zitat:
siehe Bild im Anhang.
Ja und?

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
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 2. Apr 2015 um 11:36 Uhr)
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
299 Beiträge
 
#48

AW: TRUE/FALSE Part

  Alt 2. Apr 2015, 22:25
Zitat:
Beachten Sie, dass die Zuweisungsanweisung newCustomer = True wie der Ausdruck im vorherigen Beispiel aussieht. Sie führt jedoch eine andere Funktion aus und wird auf eine andere Art verwendet. ...
Code:
If newCustomer = True Then
   newCustomer = False
End If
Darum haben in Delphi/Pascal die Zuweisungen und Vergleiche unterschiedliche Operatoren, damit man das nicht verwechseln kann und nicht das Selbe raus kommt, so wie in PHP.
PHP-Quellcode:
If (newCustomer = True) {
    newCustomer = False
}
Was macht denn !!?
Normalerweise schreibt man für einen Vergleich ja auch "==". Dass Zuweisungen selbst einen Wert haben, ist eher ein Feature für faule Programmierer .

lg Caps
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 5   « Erste     345   


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 20:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz