mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Binäre Differenz


Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo
habe folgendes Problem mit meinem Pic 16F877

wie kann ich die Differenz zwischen zwei Binären Zahlen herausfinden.
Also egal ob zahl a oder zahl b größer ist, jediglich die differenz 
interessiert?

gibt es da einen eingenen Befehl? wie kann es sonst realisiert werden? 
(wenn möglich ohne if schleifen )

bitte helft mir
Bernhard

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
if-Schleifen gibt es nicht. if ist eine Verzweigung.

Und die Differenz zweier Zahlen a und b ist a-b...

Vielleicht erzählst Du ja mal, in welcher Programmiersprache Du 
arbeitest (if lässt mich mal C vermuten).

Oder willst Du etwa den Betrag der Differenz haben? Das geht nur mit 
einer Verzweigung oder einer Funktion.

Autor: Marius S. (lupin) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für C:
http://www2.hs-fulda.de/~klingebiel/c-stdlib/stdlib.htm

x = abs(y);

Für ASM:
Schauen welche Zahl größer ist bzw ob das Ergebnis negativ ist (wenn du 
mit negativen Zahlen arbeiten kannst).

Autor: Thomas B. (yahp) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernhard wrote:

> wie kann ich die Differenz zwischen zwei Binären Zahlen herausfinden.
> Also egal ob zahl a oder zahl b größer ist, jediglich die differenz
> interessiert?

Der Absolutbetrag der Differenz? Und wieso binäre Zahlen? Was soll an 
denen anders sein ;->


> gibt es da einen eingenen Befehl? wie kann es sonst realisiert werden?
> (wenn möglich ohne if schleifen )

Woher sollen wir das in Unkenntnis der Programmiersprache wissen?

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hier noch eine kleine Besswerwisserei am Abend:

if ist aus sicht der Theoretischen Informatik eine Schleife.
siehe z.B. Schöning: Theoretische Informatik - kurzgefasst, S. 102

Autor: Bernhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich arbeite mit BASIC

und möchte den betrag der Differenz (binär --> vorzeichenlos)

allso geht es nicht ohne if funktion?

danke!

Autor: Thomas B. (yahp) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dieses Basic wird doch ein ABS haben oder wenigstens ne Anleitung, 
vielleicht sogar ne Befehlsübersicht? "Binär" und "Vorzeichenlos" haben 
im Übrigen nicht das geringste miteinander zu tun.

Autor: Fred S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bernhard,

schau doch einfach mal nach, ob der von Deinem Compiler verstandene 
BASIC Dialekt eine abs() Funktion (könnte auch anders heißen) hat!

Gruß

Fred

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

Bewertung
0 lesenswert
nicht lesenswert
Hans wrote:
> hier noch eine kleine Besswerwisserei am Abend:
>
> if ist aus sicht der Theoretischen Informatik eine Schleife.
> siehe z.B. Schöning: Theoretische Informatik - kurzgefasst, S. 102


Das kann sich jetzt aber nur um ein Missverständnis deiner seits
handeln.
Einem if fehlt zur Schleife die Eigenschaft der potentiell
wiederholten Ausführung von Code.
Ein if ist nichts anderes als eine bedingte Verzweigung. Damit
kann man eine Schleife bauen (mit einem weiteren Konstrukt) aber
ein if an sich ist noch lange keine Schleife.

Autor: Michael H* (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bernhard wrote:
> (binär --> vorzeichenlos)
ätsch, falsch =)
schau dir doch mal an, wie in der binärform negative zahlen 
dargestellt werden. ein bisschen komplement-bildung und maskierung 
sollten eigentlich reichen.
warum willst du eigentlich das if vermeiden?
grüße, holli

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

Bewertung
0 lesenswert
nicht lesenswert
Michael H* wrote:

> warum willst du eigentlich das if vermeiden?

Das frag ich mich auch.
Ob es jetzt ein ABS gibt oder nicht, ein Vergleich muss sein.
Ob er jetzt im ABS steckt oder explizit ausgeschrieben wird,
ohne geht es nicht.

Autor: Michael H* (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, stimmt. war grade dabei, eine korrektur zu tippen.
man kann dem if - oder eher dem compiler - die arbeit abnehmen, das 
komplement und differenz und shift und usw auszuführen (und schafft es 
vielleicht ein bisschen eleganter und kürzer), aber zum schluss braucht 
es doch den vergleich.

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eigentlich müsste man noch wissen, in welchem Format die Zahlen binär 
dargestellt werden. Ich kenne da:
- Einerkomplement
- Zweierkomplement
- Betrag und Vorzeichen
- Offset Binary

Siehe auch http://www.intersil.com/data/an/an9657.pdf

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

Bewertung
0 lesenswert
nicht lesenswert
HildeK wrote:
> Eigentlich müsste man noch wissen, in welchem Format die Zahlen binär
> dargestellt werden. Ich kenne da:
> - Einerkomplement
> - Zweierkomplement
> - Betrag und Vorzeichen
> - Offset Binary
>

Wozu willst du das wissen?

  if a > b
    diff = a - b
  else
    diff = b - a

Autor: Mr K. (mrk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger wrote:
> Hans wrote:
>> hier noch eine kleine Besswerwisserei am Abend:
>>
>> if ist aus sicht der Theoretischen Informatik eine Schleife.
>> siehe z.B. Schöning: Theoretische Informatik - kurzgefasst, S. 102
>
>
> Das kann sich jetzt aber nur um ein Missverständnis deiner seits
> handeln.
> Einem if fehlt zur Schleife die Eigenschaft der potentiell
> wiederholten Ausführung von Code.
> Ein if ist nichts anderes als eine bedingte Verzweigung. Damit
> kann man eine Schleife bauen (mit einem weiteren Konstrukt) aber
> ein if an sich ist noch lange keine Schleife.

So ganz unrecht hat er nicht denn man könnte if als eine 
Spezialfall(Wiederholungen=0) der Schleife definieren.
Oder man kann die Schleife als Wiederholung der Verzweigung definieren.

Also ist if entweder ein Spezialform und die Schleife die 
Verallgemeinerung oder ist if die Grundform und die Schleife wäre dann 
die Wiederholung der Grundform.

Hab allerdings kA wie das formal korrekt definiert ist, war nur eine 
Gedankenspiel von mir ;-)

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

Bewertung
0 lesenswert
nicht lesenswert
Mr K. wrote:

> So ganz unrecht hat er nicht denn man könnte if als eine
> Spezialfall(Wiederholungen=0) der Schleife definieren.


Dann ist also eine normale Sequenz eiegentlich auch nichts
anderes als eine Schleife die 0 mal wiederholt wird.
Eigentlich ist dann alles eine Schleife!
Da frag ich mich doch, warum in all den Entwurfswerkzeugen
zwischen diesen 3 Grundbausteinen unterschieden wird, wenn
sowieso alles eine Schleife ist.

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wozu willst du das wissen?

>  if a > b
>    diff = a - b
>  else
>    diff = b - a

Klar - aber er wollte kein 'if'.
Bei einigen Formaten reicht eine Maske.

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

Bewertung
0 lesenswert
nicht lesenswert
HildeK wrote:
>>Wozu willst du das wissen?
>
>>  if a > b
>>    diff = a - b
>>  else
>>    diff = b - a
>
> Klar - aber er wollte kein 'if'.
> Bei einigen Formaten reicht eine Maske.

:-) Schon klar.
Aber seien wir realistisch. Wieviele Systeme kennst du, die
etwas anderes als 2-er Komplement benutzen?

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wieviele Systeme kennst du, die
>etwas anderes als 2-er Komplement benutzen?
Da müsste ich jetzt schon etwas nachdenken ... ;-)
Nein - bei µC eher nicht, bei AD-Wandlern und DSPs schon eher.

Autor: Mr K. (mrk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger wrote:
> Mr K. wrote:
>
>> So ganz unrecht hat er nicht denn man könnte if als eine
>> Spezialfall(Wiederholungen=0) der Schleife definieren.
>
>
> Dann ist also eine normale Sequenz eiegentlich auch nichts
> anderes als eine Schleife die 0 mal wiederholt wird.
> Eigentlich ist dann alles eine Schleife!

Führt jede Sequenz eine Prüfung/Vergleich durch?

> Da frag ich mich doch, warum in all den Entwurfswerkzeugen
> zwischen diesen 3 Grundbausteinen unterschieden wird, wenn
> sowieso alles eine Schleife ist.

Meinst du AND, OR und NOT?

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

Bewertung
0 lesenswert
nicht lesenswert
Mr K. wrote:
> Karl heinz Buchegger wrote:
>> Mr K. wrote:
>>
>>> So ganz unrecht hat er nicht denn man könnte if als eine
>>> Spezialfall(Wiederholungen=0) der Schleife definieren.
>>
>>
>> Dann ist also eine normale Sequenz eiegentlich auch nichts
>> anderes als eine Schleife die 0 mal wiederholt wird.
>> Eigentlich ist dann alles eine Schleife!
>
> Führt jede Sequenz eine Prüfung/Vergleich durch?

:-)
Jetzt wirds aber lächerlich.

>> Da frag ich mich doch, warum in all den Entwurfswerkzeugen
>> zwischen diesen 3 Grundbausteinen unterschieden wird, wenn
>> sowieso alles eine Schleife ist.
>
> Meinst du AND, OR und NOT?

Sequenz
bedingte Verzweigung
Schleife

Autor: Jochen Müller (taschenbuch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>if ist aus sicht der Theoretischen Informatik eine Schleife.
>>siehe z.B. Schöning: Theoretische Informatik - kurzgefasst, S. 102

Ja, der hat auch ausser dem o.g. noch sehr, sehr viel Unsinn 
geschrieben...
Ausserordentlich viel Unsinn. Das muss man wirklich mal sagen.

Gruss
Jochen Müller

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Schleife ist ein Band, eine Schnur, ein Signalfluss (in der
Elektronik oder Regelungstechnik) oder eben ein Programmfluss,
das/die/der in sich geschlossen ist.

Da Programme normalerweise immer nur in eine Richtung (bei höheren
Programmiersprachen von oben nach unten, bei Maschinencode nach
aufsteigenden Adressen) ausgeführt wird, kann das Schließen der
Schleife nur durch einen Rückwärtssprung erfolgen, entweder explizit
(Goto, JMP) oder implizit (am Ende eines For- oder While-Konstrukts).
Dieser Rückwärtssprung wird entwder bedingt oder unbedingt ausgeführt.
Die zweite Alternative ermöglicht Endlosschleifen.

Ein If- oder If-Else-Konstrukt allein realisiert aber nur Vorwärts-
sprünge und damit eben gerade keine Schleife. "Verzweigung" ist
deswegen der treffendere und allgemein gebräuchliche Begriff dafür.

Autor: stepp64 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ganze Leben ist eine einzige Schleife. Irgendwann fängt alles wieder 
von vorne an ;-)

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
yalu wrote:
> Ein If- oder If-Else-Konstrukt allein realisiert aber nur Vorwärts-
> sprünge und damit eben gerade keine Schleife. "Verzweigung" ist
> deswegen der treffendere und allgemein gebräuchliche Begriff dafür.
und
> Sequenz
> bedingte Verzweigung
> Schleife

AFAIR hätte ich das zwar auch so ähnlich definiert: if-then, wie auch 
while etc, sind Kontrollstrukturen, die wiederum in Verzweigungen und 
Schleifen unterteilt werden.
Aber: Auch nur mit if lassen sich Schleifen erzeugen (Rekursion).
void x(int n) {
    if (n > 0) {
        // do something
        x(n - 1);
    } 
}

p.s. www.if-schleife.de
p.p.s. 1 = 2 oder so ähnlich 
http://de.wikipedia.org/wiki/Banach-Tarski-Paradoxon

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

Bewertung
0 lesenswert
nicht lesenswert
Arc Net wrote:

> Aber: Auch nur mit if lassen sich Schleifen erzeugen (Rekursion).

Es ist aber nicht das if alleine, welches die Schleife erzeugt.
Genausowenig wie es in einer Programmiersprache eine
Schach-Spielen-Anweisung gibt, nur weil man aus einer
Kombination von Konstrukten ein Schachprogramm bauen kann.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Aber: Auch nur mit if lassen sich Schleifen erzeugen (Rekursion).

Die in meinem letzten Post angegebenen Möglichkeiten, einen Rückwärts-
sprung zu realisieren, waren Beispiele. Eine weitere Möglichkeit sind
CALLs bzw. Unterprogrammaufrufe. Genau diese wird in deinem Beispiel
genutzt, um eine Schleife zu erzeugen. Mit dem If hat das überhaupt
nichts zu tun. Das dient lediglich dazu, die Schleife irgendwann
wieder abzubrechen.

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.