AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Über den Umgang mit Boolean
Tutorial durchsuchen
Ansicht
Themen-Optionen

Über den Umgang mit Boolean

Ein Tutorial von Brüggendiek · begonnen am 16. Nov 2005 · letzter Beitrag vom 7. Feb 2012
Antwort Antwort
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.810 Beiträge
 
Delphi 12 Athens
 
#1

AW: Über den Umgang mit Boolean

  Alt 7. Feb 2012, 09:38
Bei C/C++ ist eh Hopfen und Malz verloren.
*SCNR*

Spaß beiseite: Es kann bei den von Dir genannten Fällen durchaus sein, daß die zu vergleichende Variable gar keine Boolean ist, sondern zB ein Integer oder auch ganz was anderes, C erlaubt entsprechend phantasievolle Vergleiche, und gibt sogar manchmal die erwarteten Ergebnisse zurück. Da lob ich mir doch eine typensichere Sprache.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Über den Umgang mit Boolean

  Alt 7. Feb 2012, 09:44
Geade bei C (ohne ++) gab es das Problem, dass es keine standardmäßigen Konstanten für true/false gab, und somit jeder in seinem Abschnitt seine eigenen derlariert hat. Dadurch konnte er dann recht sicher sein, dass Gleichheit besteht, komfortabel war/ist das insgesamt aber wohl eher nicht

Bei C(++) gilt: 0=false, egal was für einen Typ man vor sich hat. So wird ein "if Assigned(MyInstance) then..." dort oft auch zu einem "if (MyInstance) {...}".
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Über den Umgang mit Boolean

  Alt 7. Feb 2012, 10:02
Joar, False ist eigenttlich immer 0 (wenn der Boolean als ordinaler Type angelegt ist), also "nichts".

Wobei aber das Delphi-True = 1
und das C-True = -1
Code:
Die standardisierten Konstanten:

True:
  Boolean        = $01
  ByteBool / bool = $FF
  WordBool       = $FFFF
  LongBool / BOOL = $FFFFFFFF

False:
  Boolean        = $00
  ByteBool / bool = $00
  WordBool       = $0000
  LongBool / BOOL = $00000000
In der Auswertung ist es aber immer:
False = 0
True <> 0
True = nicht False

Und schon fällt auf, warum = True nicht korrekt sein kann.
= False würde zwar problemlos gehn, aber wenn man = True nicht nehmen darf kann, warum soll man sich dann mit = False auch noch rumschlagen. (schön einheitlich halt)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Über den Umgang mit Boolean

  Alt 7. Feb 2012, 10:42
Joar, False ist eigenttlich immer 0 (wenn der Boolean als ordinaler Type angelegt ist), also "nichts".

Wobei aber das Delphi-True = 1
und das C-True = -1
Code:
Die standardisierten Konstanten:

True:
  Boolean        = $01
  ByteBool / bool = $FF
  WordBool       = $FFFF
  LongBool / BOOL = $FFFFFFFF

False:
  Boolean        = $00
  ByteBool / bool = $00
  WordBool       = $0000
  LongBool / BOOL = $00000000
Bei Free Pascal kommen dann noch QWordBool, Boolean16, Boolean32 und Boolean64 (letztere drei seit 2.6.0) hinzu

Code:
True:
  QWordBool      = $FFFFFFFFFFFFFFFF
  Boolean16       = $0001
  Boolean32       = $00000001
  Boolean64       = $0000000000000001 

False:
  QWordBool      = $0000000000000000
  Boolean16       = $0000
  Boolean32       = $00000000
  Boolean64       = $0000000000000000
Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#5

AW: Über den Umgang mit Boolean

  Alt 7. Feb 2012, 11:06
Letztlich ist wohl auch unter C(++) der direkte Vergleich genau so kritisch wie in Delphi. Vor allen Dingen kann bei einem nackten "if mybool then" ein schlankes "jz" bzw. "jnz" erzeugt werden, ohne vorher noch ein "cmp" zu machen, sowie den Vergleichswert zu laden oder verpointern.
Und da eben letztlich immer ein jz oder jnz mitspielt, ist ein "if 0" immer der richtige weg, und ein "if not 0" die logische Konsequenz. Dabei tritt dann nur eben das Problem auf, dass Datentypen breiter als 1 Bit sind, und sich somit je nach Architektur beliebig viele "nicht nulls" bilden ließen. Auch in C-likes, und daher ist auch da zumindest ein "== true" eher smelly.
Interessant finde ich, dass man für beide o.g. True-Konstrukte ($FFFFFFFF und 1) logisch und semantisch sinnvoll argumentieren kann, wobei beides bei vernünftiger Verwendung (kein Vergleich machen) auch problemlos gemischt benutzt werden kann. Delphi geht den "mathematischen" Weg 0-1, C den technischen, bei dem einfach das "not" als logischer Operator auf den gesamten Operanden angewendet wird.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium ( 7. Feb 2012 um 11:12 Uhr)
  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 01:05 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