mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik C18 Zahl überprüfen


Autor: Rambo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ich möchte eine Zahl prüfen, ob sie gerade ist. Was genau macht folgende 
Funktion:

if (zahl % 2 == 0);

Autor: Michael H. (morph1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nichts dank dem Strichpunkt hinter dem if, ein wenig Rechenzeit 
verschwenden.

Bei richtiger Anwendung:

%2 => modulo 2 -> den Rest einer Division durch 2 zurückgeben

Ist der 0 -> gerade
Ist der 1 -> ungerade

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rambo schrieb:
> Hi
>
> Ich möchte eine Zahl prüfen, ob sie gerade ist. Was genau macht folgende
> Funktion:
>
> if (zahl % 2 == 0);

wenn die zahl mod 2 = 0 ist, ist sie gerade.

Das ist einer der Fälle, wo die höhere Programmiersprache extrem 
uneffektiv ist. Eine Zahl ist gerade, wenn das kleinste Bit = 0 ist, das 
lässt sich mit Assembler mit einem einzigen Befehl prüfen und in einem 
Maschinentakt statt einer kompletten Division.

Gruss Reinhard

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das ist einer der Fälle, wo die höhere Programmiersprache extrem
>uneffektiv ist. Eine Zahl ist gerade, wenn das kleinste Bit = 0 ist, das
>lässt sich mit Assembler mit einem einzigen Befehl prüfen und in einem
>Maschinentakt statt einer kompletten Division.

Das liegt eher am Programmierer als an der Sprache.

if((zahl & 1) == 0){}

Autor: Maxxie (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noe, höchstens an den Compiler-Flags.

das % 2erPotenzKonstante wird als & umgesetzt

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>das % 2erPotenzKonstante wird als & umgesetzt

Das habe ich beim C18 schon anders gesehen ;)
Er tut es nähmlich nicht. Zumindest die
Version die ich mal benutzt habe.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Reinhard Kern schrieb:

> Das ist einer der Fälle, wo die höhere Programmiersprache extrem
> uneffektiv ist. Eine Zahl ist gerade, wenn das kleinste Bit = 0 ist

Sehr schlechtes Beispiel für den Unterschied, denn mit Hochsprache hat 
das überhaupt nichts zu tun. Das lässt sich in Hochsprache genauso 
realisieren und man kann das auch in Assembler per Division abwickeln.

Ausserdem ist es seit jeher Aufgabe eines Compilers, solche 
Trivialitäten aufeinander abzubilden. Wenn ein heutiger Compiler es in 
diesem Fall nicht schafft, dann ist das dem Compiler anzulasten, nicht 
der Sprache.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.