Binäre Differenz

Gast #823824
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
#823839
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.
Persönliche Seite #823846
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?
#824164
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.
Gast #824180
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
Gast #824194
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.
#824214
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
#824225
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 ;-)
#824243
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.
#824284
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?
Gast #824293
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.
#824312
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?
#824323
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
#824356
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
Gast #824390
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.
#824721
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
#824738
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.
Gast #824758
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren