www.mikrocontroller.net

Forum: Compiler & IDEs Rechnen mit AVR


Autor: Sacx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich habe nur kurz eine kleine, simple Frage...

Und zwar geht es darum das ich z.b.:

L12 = L1-L2

berechnen will. Nun soll das Ergebnis aber auf jeden Fall IMMER positiv 
sein, egal ob L1 oder L2 größer ist.

Gibt es das irgendeinen Befehl, der das ganze in "Betrag" setzt oder 
kann ich L12 einfach als unsigned int wählen? Damit dürften doch auch 
nur positvie Werte ausgegeben werden oder erhält man dann im Falle einer 
negativen Zahl Mist?

Desweiteren noch ne Frage:

Könnte ich eine if-Schleife so aufbauen?

if((-100<L1<100)&&(-100<L1<100))

...dann tue das!


Danke schonmal im Voraus!

Gruß Sacx

Autor: micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuche es mal mit

L12 = abs(l1-l2)

Es gibt keine if-schleifen und die 2 Abfragebedingung ist identisch mit 
der ersten und somit überflüssig  ;-)

Autor: horst (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A)
L12 = (L1>L2) ? L1 - L2 : L2 - L1;

B)
L12 = L1 - L2;
if (L12<0)
    L12 = -L12

C)
siehe micha

Autor: sacx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay danke ;) das mit abs scheint mir am einfachsten zu sein.

Die zweite Bedingung bei if sollte eigentlich L2 sein.
Wäre das dann grundsätzlich möglich?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sacx schrieb:

> Die zweite Bedingung bei if sollte eigentlich L2 sein.
> Wäre das dann grundsätzlich möglich?

Grundsätzlich ja. ABer nicht so wie du das geschrieben hast

Ein Vergleichsoperator hat einen linken Operanden und einen rechten 
Operanden. Punkt.
Ein Operand kann nicht gleichzeitig für eine Vergleichsoperation als 
rechter Operand und für einen anderen Vergleichsoperation als rechter 
Teil fungieren.

Aber man kann natürlich die Ergebnisse von 2 Vergleichen mit zb einem 
logischen UND (&&) oder einem logischen ODER (||) miteinander verknüpfen

  if( (-100 < L2) && ( L2 < 100) )


> Versuche es mal mit

einem C-Buch.
Ganz dringend!

Denn das was du geschrieben hast

   if( -100 < L2 < 100 )

ist nämlich syntaktisch richtiges C. Das ist kein Syntaxerror und dieses 
Geschriebene hat tatsächlich auch eine Bedeutung. Aber nicht die, die du 
ihm beimisst, sondern es macht etwas ganz anderes als du vermutest.

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.