Zahlen Differnez bestimmtn

Gast #596917
Lesenswert?

Hallo, hab damal folgende Frage: Ich habe mir einen speicher 
porogrmmiert und auf diesem Speicher zeigen 2 Pfeile! Ich muss halt 
jetzt nur die IF Anweisung wissen, dsa wenn sich Pfeil 1 Pfeil 2 nähert! 
Da der Speicher 255 Zeichen Platz hat kann der zeiger auch über die 255 
kommen und wieder bei 0 anfange. Ich bräuchte also eine IF-Anweisung die 
sagt wenn die Difference zwischen Zeiger 1 und 2 zu klein wird soll er 
das und das machen!
Gast #597175
Lesenswert?

@yalu
Das stimmt nicht was du schreibst. Rechne nochmal alle möglichkeiten 
durch.

Eins solle ich aber ergänzen, mit Zeiger ist nicht der Zeiger gemeint 
sondern eher der Index im Array[256].

also : differenz=((index1 + 256) - index2) & 255

ich bin davon augegangen, dass index1 und index2 Int-Werte sind, also 
kein char.
Gast #602717
Lesenswert?

Etwas spät, aber:

@Läubi:

Ich bin wie Martin davon ausgegangen, dass alle beteiligten Variablen
(Zeiger1, Zeiger2 und differenz) vom Typ int sind (wie bei Indizes
üblich). Deswegen hat das & 255 schon eine Bedeutung.

Du hast aber recht, wenn differenz ein unsigned char und 8 Bit breit
ist. Dann kann man das & 255 weglassen.

Aus Portabilitätsgründen würde ich aber auch in diesem Fall dazu
tendieren, die das & 255 beizubehalten. Stören tut's nicht und mit
etwas Glück wird es in den Fällen, wo es nicht benötigt wird,
wegoptimiert.

@Martin:

> Das stimmt nicht was du schreibst. Rechne nochmal alle möglichkeiten
> durch.

Habe ich, die beiden Ausdrücke

  differenz = ((Zeiger1 + 256) - Zeiger2) & 255

und

  differenz = (Zeiger1 - Zeiger2) & 255

liefern für alle Zeiger1 und Zeiger2 aus [0, 255] das gleiche
Ergebnis. Oder reden wir vielleicht irgendwo aneinander vorbei?

> Ist index1 und index2 ein char-Wert bleibt nur noch
> differenz = index1-index2
> übrig

Stimmt, aber unsigned char passt besser, da dann auch Differenzen >127
als positive Zahlen repräsentiert werden.

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