Forum: Mikrocontroller und Digitale Elektronik Variablen vertauschen - ich verzweifle


von Sean G. (atmega318)


Lesenswert?

Ich bin im Moment am schreiben einer simplen "Grafikkarte", welche eine 
16x16 RGB LED Matrix ansteuert. Die Ansteuerung selbst geht, also fange 
ich jetzt mit den Grafikfunktionen (Linie, Viereck etc.) an. Da ich die 
Linienfunktion so einfach bedienbar wie möglich halten wollte, sollte 
die Reihenfolge der Koordinaten egal sein. Also fragt meine Funktion 
einfach ab welche Zahl grösser ist, und dreht sie bei bedarf.
Das habe ich so gelöst:
1
  int x1 = 0; 
2
  int x2 = 0;
3
  int y1 = 3;
4
  int y2 = 7;
5
6
    if (y2 >> y1)
7
    {
8
      int temp = y1;    // das hier vertauscht y1 und y2, falls y2 grösser ist.
9
      y1 = y2;
10
      y2 = temp;
11
    }
12
    if (y1 == 7 && y2 == 3)   
13
    {
14
      pixel(30,30,0,7,7); // ausgabe auf display
15
    }

eigentlich sollte die Abfrage "if (y1 == 7 && y2 == 3)" wahr sein, egal 
ob
y1 = 3; und y2 = 7;
oder ob
y1 = 7; und y2 = 3;
da es im ersten fall ja vertauscht wird. Bei mir funktioniert das 
vertauschen aber komischerweise nur, wenn y1 kleiner 3 ist. Das heisst 
so wie oben, wird das pixel(30,30,0,7,7); nie erreicht, wenn ich aber 
alle 3`s durch 2, 1 oder 0 ersetze (so:)

1
  int x1 = 0; 
2
  int x2 = 0;
3
  int y1 = 2;
4
  int y2 = 7;
5
6
    if (y2 >> y1)
7
    {
8
      int temp = y1;    // das hier vertauscht y1 und y2, falls y2 grösser ist.
9
      y1 = y2;
10
      y2 = temp;
11
    }
12
    if (y1 == 7 && y2 == 2)   
13
    {
14
      pixel(30,30,0,7,7); // ausgabe auf display
15
    }

dann geht es!
Ich weiss echt nicht mehr weiter, ich hoffe mal es war ein einfacher 
Fehler, und jemand kann mir sagen, warum dass nicht geht.
LG, Sean

von Karl H. (kbuchegg)


Lesenswert?

Sean Goff schrieb:

>     if (y2 >> y1)

Ich denke nicht, dass du hier shiften willst, sondern vergleichen

      if (y2 > y1)

von Sean G. (atmega318)


Lesenswert?

Hallelujah, danke, danke, danke! Das erklärt so einiges, denn seit ich 
programmiere (> 5 Jahre), habe ich IMMER >> und << verwendet! zum Glück 
habe ich dann meistens >= und <= genommen, was das Problem natürlich 
löste... Aber da waren immer wieder diese Programme, die mit x >> 4 
nicht funktionieren wollten, und mit x >= 5 schon...
Zum Glück hab ich gefragt, sonst hätt ich noch jahrelang solchen Mist 
zusammengetippt :(
LG, Sean

von Karl H. (kbuchegg)


Lesenswert?

Sean Goff schrieb:
> Hallelujah, danke, danke, danke! Das erklärt so einiges, denn seit ich
> programmiere (> 5 Jahre), habe ich IMMER >> und << verwendet!

Das dürfte dann wohl der hartnäckigste Fall sein, dem ich jeh dringenst 
nahegelegt habe, sich doch bitte mal ein C-Buch zu kaufen und es 
durchzuarbeiten. Ich will gar nicht drann denken, was du in mehr als 5 
Jahren noch für einen Bockmist dir zusammengereimt hast, wenn es schon 
an banalen Vergleichen scheitert.

von Sean G. (atmega318)


Lesenswert?

Ja da hast du recht, das sollte ich wohl tun. Sonst ist es bis jetzt 
eigentlich alles ganz gut gegangen, ist halt schon so, wenn ich Fehler 
mache (egal wo) dann immer die banalsten
LG, Sean

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.