Forum: Mikrocontroller und Digitale Elektronik Binäre Differenz


von Bernhard (Gast)


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

von Johannes M. (johnny-m)


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.

von Marius S. (lupin) Benutzerseite


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).

von Thomas B. (yahp) Benutzerseite


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?

von Hans (Gast)


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

von Bernhard (Gast)


Lesenswert?

ich arbeite mit BASIC

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

allso geht es nicht ohne if funktion?

danke!

von Thomas B. (yahp) Benutzerseite


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.

von Fred S. (Gast)


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

von Karl H. (kbuchegg)


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.

von Michael H* (Gast)


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

von Karl H. (kbuchegg)


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.

von Michael H* (Gast)


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.

von HildeK (Gast)


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

von Karl H. (kbuchegg)


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

von Mr K. (mrk)


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 ;-)

von Karl H. (kbuchegg)


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.

von HildeK (Gast)


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.

von Karl H. (kbuchegg)


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?

von HildeK (Gast)


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.

von Mr K. (mrk)


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?

von Karl H. (kbuchegg)


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

von Jochen M. (taschenbuch)


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

von yalu (Gast)


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.

von stepp64 (Gast)


Lesenswert?

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

von Arc N. (arc)


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).
1
void x(int n) {
2
    if (n > 0) {
3
        // do something
4
        x(n - 1);
5
    } 
6
}

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

von Karl H. (kbuchegg)


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.

von yalu (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.