AGB  ·  Datenschutz  ·  Impressum  







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

if not I = 0 then...

Ein Thema von MatthiasR · begonnen am 29. Nov 2011 · letzter Beitrag vom 6. Dez 2011
Antwort Antwort
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#1

if not I = 0 then...

  Alt 29. Nov 2011, 12:44
Delphi-Version: 7
Ich habe gerade eine seltsame Entdeckung gemacht. Und verhält sich Delphi bei der Auswertung eines bestimmten boole'schen Ausdrucks nicht so, wie ich es erwarten würde. Konkret handelt es sich um folgende Abfrage:
Delphi-Quellcode:
procedure TForm1.Btn1Click(Sender: TObject);
var
  I: Integer;
begin
  I := 1234;

  if not I = 0 then
    ShowMessage('Test');
end;
Normalerweise würde ich eine solche Abfrage so formulieren:
Delphi-Quellcode:
procedure TForm1.Btn1Click(Sender: TObject);
var
  I: Integer;
begin
  I := 1234;

  if I <> 0 then
    ShowMessage('Test');
end;
Oder alternativ eben mit Klammer:
Delphi-Quellcode:
procedure TForm1.Btn1Click(Sender: TObject);
var
  I: Integer;
begin
  I := 1234;

  if not (I = 0) then
    ShowMessage('Test');
end;
Ich dachte allerdings bisher, auch die erste Variante würde zum Ziel führen, da sich Delphi auch nicht darüber beschwert, dass "I" bspw. selbst kein boole'scher Ausdruck ist und "not I" damit ebenfalls nicht. In welcher Reihenfolge wertet Delphi den ersten Ausdruck denn dann aus, wenn es ihn insgesamt als korrekten boole'schen Ausdruck wertet? Fakt ist jedenfalls, dass der if-Zweig nur in den beiden letztgenannten Ausdrücken durchlaufen wird.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

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

AW: if not I = 0 then...

  Alt 29. Nov 2011, 12:46
Delphi wertet erst "not I" aus. Negiert also die Bits der Integer-Variable und vergleicht dann erst auf 0. Du musst in so einem Fall Klammern setzen.
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
MatthiasR

Registriert seit: 21. Apr 2005
193 Beiträge
 
#3

AW: if not I = 0 then...

  Alt 29. Nov 2011, 13:02
Ah, OK, da hätte ich jetzt selbst drauf kommen können. Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: if not I = 0 then...

  Alt 29. Nov 2011, 14:51
Irgendwo in der OH steht auch nochmal eine Auflistung, was wie wann ausgewertet wird.

Klammern haben immer Vorrang
not vor allem
Negierung (-) wie ein not (- und not sind gleichrangig .. wer zuletzt kommt, ist eher dran)
and vor or
* und / vor + oder -
...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: if not I = 0 then...

  Alt 29. Nov 2011, 15:05
Auffallend ähnlich wie Mathe. Ob da möglicherweise ein Zusammenhang besteht? Hm.
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: if not I = 0 then...

  Alt 5. Dez 2011, 09:45
Auffallend ähnlich wie Mathe. Ob da möglicherweise ein Zusammenhang besteht? Hm.
Kann ich mir nicht vorstellen. Da ist wahrscheinlich reiner Zufall.

Was soll den Programmieren mit Mathe zu tun haben?
Ralf Kaiser
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

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

AW: if not I = 0 then...

  Alt 5. Dez 2011, 09:49
Auffallend ähnlich wie Mathe. Ob da möglicherweise ein Zusammenhang besteht? Hm.
Was soll den Programmieren mit Mathe zu tun haben?
Das fragen sich die Berufsschulen wohl auch. In der Ausbildung zum Fachinformatiker hat man in 3 Jahren nicht 5 Minuten Mathe
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
Benutzerbild von himitsu
himitsu
Online

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

AW: if not I = 0 then...

  Alt 5. Dez 2011, 10:28
Die gehen wohl davon auß, daß man heutzutage noch Zeit zum Lernen hat, in den Grund-/Haupt-/Realschulen/Gymnasien
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 5. Dez 2011 um 10:43 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#9

AW: if not I = 0 then...

  Alt 6. Dez 2011, 08:45
Auffallend ähnlich wie Mathe. Ob da möglicherweise ein Zusammenhang besteht? Hm.
Was soll den Programmieren mit Mathe zu tun haben?
Das fragen sich die Berufsschulen wohl auch. In der Ausbildung zum Fachinformatiker hat man in 3 Jahren nicht 5 Minuten Mathe
Kann ich aus derzeitiger Erfahrung nur bestätigen. Gleichzeitig bekomme ich auch immer wieder das Gefühl, das für das Programmieren auch Logik nicht so wichtig scheint.
Ralph
  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 11:22 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