AGB  ·  Datenschutz  ·  Impressum  







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

Boolean in Integer umwandeln

Ein Thema von xZise · begonnen am 4. Jan 2007 · letzter Beitrag vom 5. Jan 2007
Antwort Antwort
Seite 2 von 2     12   
k-weddige

Registriert seit: 15. Okt 2005
20 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Boolean in Integer umwandeln

  Alt 5. Jan 2007, 01:47
Beides Falsch!
Delphi-Quellcode:
var
  Bool: Boolean;

const
  BoolToStr: array [Boolean] of String = ('Falsch', 'Richtig');

procedure TForm1.FormCreate(Sender: TObject);
begin
  Bool := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Lines.Add(BoolToStr[Bool]);
 Inc(Bool);
end;
Und jetzt klick bitte 3x auf den Button.

Jetzt mit Ord(Bool):
Delphi-Quellcode:
var
  Bool: Boolean;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Bool := False;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Add(IntToStr(ord(Bool)));
  Inc(Bool);
end;
Ord(Bool) macht das gleiche, wie Integer(Bool).

Konstantin
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#12

Re: Boolean in Integer umwandeln

  Alt 5. Jan 2007, 03:27
Zitat:
Und jetzt klick bitte 3x auf den Button.
Nicht bevor du mir drei Gründe nennst wieso ich drei mal auf den Button klicken soll und zu False die Zahl 3 dazuaddieren soll?

Und noch was! Wer

Delphi-Quellcode:
var
  Bool: Boolean;

const
  BoolToStr: array [Boolean] of String = ('Falsch', 'Richtig');
eingibt und dann das

  Inc(Bool); der hat entweder den falschen Job / falsches Hobby, oder er klugscheißt.

Nicht falsch verstehen, ohne jetzt deinem Wunsch nachgekommen zu sein weiß ich was passieren wird, aber Boolean ist Boolean. Und wer Boolean addiert, der hat entweder die Übersicht verloren was er macht oder hat keine Ahnung was er macht. Da kannst du auch kommen, eine Byte Variable deklarieren, ihr den Wert 255 geben und dann um eins erhöhen. Einen Byte Variable um 1 erhöhen ist nicht falsch, wird aber falsch wenn sie bereits den Wert 255 hat, denn dann wundert sich der Wirt wieso er 256 Bier ausgegeben hat, aber keines auf der Rechnung steht. Also, entweder ich weiß nicht was ich tue, oder ich addiere nicht zu Boolean.

Also, dir gelingt wahrscheinlich eine Fehlermeldung, aber was sagt uns das? Das du nicht programmieren kannst und mit Boolean addiert hast. Da kannst du auch gleich anfangen durch Null zu dividieren oder du weißt was du machst
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#13

Re: Boolean in Integer umwandeln

  Alt 5. Jan 2007, 12:40
Hallo,
Zitat von Popov:
der hat entweder den falschen Job / falsches Hobby, oder er klugscheißt.

Nicht falsch verstehen, ohne jetzt deinem Wunsch nachgekommen zu sein weiß ich was passieren wird, aber Boolean ist Boolean. Und wer Boolean addiert, der hat entweder die Übersicht verloren was er macht oder hat keine Ahnung was er macht. Da kannst du auch kommen, eine Byte Variable deklarieren, ihr den Wert 255 geben und dann um eins erhöhen. Einen Byte Variable um 1 erhöhen ist nicht falsch, wird aber falsch wenn sie bereits den Wert 255 hat, denn dann wundert sich der Wirt wieso er 256 Bier ausgegeben hat, aber keines auf der Rechnung steht. Also, entweder ich weiß nicht was ich tue, oder ich addiere nicht zu Boolean.

Also, dir gelingt wahrscheinlich eine Fehlermeldung, aber was sagt uns das? Das du nicht programmieren kannst und mit Boolean addiert hast. Da kannst du auch gleich anfangen durch Null zu dividieren oder du weißt was du machst
Dann will ich auch mal klugscheißen. Boolean ist nicht, ich wiederhole, nicht definiert als Null und Eins. Das mag für die Werte True und False unter Delphi gelten, aber damit hat sich das Ganze schon wieder. Der einzige Wert, der bei Boolean definiert ist, ist Null, was als False interpretiert wird. Folglich ist auch Zwei nicht False, also als True zu interpretieren. Die einzig richtige Lösung für das Problem ist demnach in Beitrag #4 von mkinzler zu finden (Das gilt natürlich nur, wenn als Ergebnis nur Null und Eins herauskommen darf).
klugscheiß Ende.

xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#14

Re: Boolean in Integer umwandeln

  Alt 5. Jan 2007, 20:29
Bevor jetzt etwas ausbricht was nicht geplant was - meine Variante war nur Spaß. Das war so weit von richtig (richtig im Sinne von Umrechnungsfunktion für BoolToInt), daß mich die Reaktion geradezu gewundert hat. Es sollte nur die Möglichkeiten zeigen was so alles möglich ist. Dabei kommt zwar was interessantes raus, ist aber keine Umrechnungsfunktion.

Zitat von xaromz:
Dann will ich auch mal klugscheißen. Boolean ist nicht, ich wiederhole, nicht definiert als Null und Eins. Das mag für die Werte True und False unter Delphi gelten, aber damit hat sich das Ganze schon wieder.
Nun, das Problem ist, daß der kleinste Wert den man speichern kann ein Byte ist. Das bedeutet aber nicht, daß es eine Rolle spielt, bzw. spielen sollte. Ein True ist True und False ist False. Hier ist True 1, in einigen anderen Sprachen ist es auch mal -1, und dann gibt es Sprachen mit ganz verrückten Bools wo es sogar ein Nil mit 2 (oder war das -2?) gibt, für den Fall, daß es noch keine Entscheidung gab.

Aber um auf dein Einwand zu kommen

Zitat:
Der einzige Wert, der bei Boolean definiert ist, ist Null, was als False interpretiert wird. Folglich ist auch Zwei nicht False, also als True zu interpretieren.
Das ist nicht richtig im Sinne von Boolean.

Nur weil etwas nicht definiert ist, bedeutet es nicht, daß es eine Wahlmöglichkeit gibt. Ein Boolean hat zwei Zustände, nicht drei und auch nicht vier. Zwei. Ob nun False für 0 steht und True für 1, 2 oder 3 ist egal. Nicht egal ist ob True für 1 und 2 und 3 steht. Tut es nicht. Ein Boolean steht für zwei Zustände. Es kann für 0 und für 7 stehen, aber dann nicht für 1. Also, nur weil es nicht knallt wenn ich Inc(Bool) mache, bedeute es nicht, daß True alles ungleich 0 ist, dann dann wäre die Boolean Definition nicht, daß es eines von zwei Zuständen ist, sondern Null und allem Anderen.

Deshalb kann man Inc(Bool) als Programmierfehler ansehen.

Anders sieht es aus wenn du nicht von Delphi/Pascal sprichst, sondern allgemein. Da könnte False für 12 und True für 27 stehen. Hauptsache zwei Zustände. Aber wir sind hier in einem Programmierforum für Delphi.
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#15

Re: Boolean in Integer umwandeln

  Alt 5. Jan 2007, 21:27
Also ich finde diese Diskussion sehr interessant, und ich habe das jetzt über case geregelt

Außerdem wollte ich nur überprüfen, ob das erste Zeichen ein bestimmten Wert hat.
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#16

Re: Boolean in Integer umwandeln

  Alt 5. Jan 2007, 21:35
Hallo,
Zitat von Popov:
Das ist nicht richtig im Sinne von Boolean.

Nur weil etwas nicht definiert ist, bedeutet es nicht, daß es eine Wahlmöglichkeit gibt. Ein Boolean hat zwei Zustände, nicht drei und auch nicht vier. Zwei. Ob nun False für 0 steht und True für 1, 2 oder 3 ist egal. Nicht egal ist ob True für 1 und 2 und 3 steht. Tut es nicht. Ein Boolean steht für zwei Zustände. Es kann für 0 und für 7 stehen, aber dann nicht für 1. Also, nur weil es nicht knallt wenn ich Inc(Bool) mache, bedeute es nicht, daß True alles ungleich 0 ist, dann dann wäre die Boolean Definition nicht, daß es eines von zwei Zuständen ist, sondern Null und allem Anderen.

...

Anders sieht es aus wenn du nicht von Delphi/Pascal sprichst, sondern allgemein. Da könnte False für 12 und True für 27 stehen. Hauptsache zwei Zustände. Aber wir sind hier in einem Programmierforum für Delphi.
Wir befinden uns zwar in einem Delphi-Forum, müssen uns aber mit einer Umgebung herumplagen, die in C geschrieben ist. Deshalb sollte man keine Funktion schreiben, die nur mit einem Delphi-Boolean zurechtkommt (ich will gar nicht wissen, wie viele verschiedene Boolean-Typen in den Windows-Sourcen definiert sind). Übrigens reden wir auch nicht von einem Boolschen Wert im Sinne der Mathematik (zwei Zustände), sondern über den Wert einer boolschen Variable in Programmiersprachen, und da gilt nun mal: alles außer Null ist True. Deshalb ist zwar Deine Sichtweise "es gibt nur zwei Zustände" prinzipiell richtig, für die Praxis aber nicht brauchbar. Unterschiedliche Programmiersprachen definieren eben True ab und zu anders, ich habe aber noch keine gesehen, die False nicht als Null definiert. Eigentlich sollte die Funktion sogar so aussehen:
Delphi-Quellcode:
function BoolToInt(B: Boolean): Integer;
begin
  if b then
    Result := Integer(True)
  else
    Result := Integer(False);
end;
Damit sind wir auch auf der sicheren Seite, wenn Borland einmal True und False neu definiert .
Zitat von Popov:
Deshalb kann man Inc(Bool) als Programmierfehler ansehen.
Nein, das kann man nicht. Ist vielleicht keine schöne Sache, aber durchaus zulässig und gültiges Pascal. Und genau deshalb muss eine Funktion sowas auch berücksichtigen. Dass derjenige, der sowas macht, ab Besten erschossen werden sollte, ist natürlich selbstverständlich .

Nix für ungut
xaromz
I am a leaf on the wind - watch how I soar
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 14:08 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