Forum: Mikrocontroller und Digitale Elektronik Vergleich mit tilde


von Matthias F. (frank91)


Lesenswert?

Hallo alle zusammen :-)

Ich bin gerade beim programmieren auf ein Problem gestoßen.
Es geht um folgenden Code
1
  EEPROM_DatenWerte.versionderEepromstruktur[0] =0;
2
  EEPROM_DatenWerte.versionderEepromstrukturInvertiert[0] =255;
3
4
  test[0] = (~(EEPROM_DatenWerte.versionderEepromstrukturInvertiert[0]));
5
  test[1] = EEPROM_DatenWerte.versionderEepromstruktur[0];
6
7
  if((EEPROM_DatenWerte.versionderEepromstruktur[0]) !=     
8
    (~(EEPROM_DatenWerte.versionderEepromstrukturInvertiert[0])) )
9
  {
10
    test[2] =100; //Wird seltsamerweiße ausgeführt
11
  }
12
13
  if(test[0] !=     test[1] )
14
  {
15
    test[3] =100; //Wird richtigerweiße nicht ausgeführt
16
  }

Alle Werte haben den Datentyp char.

Die 2 ifs sind eigentlich identisch. Der einzige Unterschied ist dass 
das eine den Vergleich direkt macht und das zweite if über eine 
zwischengespeicherte Variable.
Allerdings wird das erste If seltsamerweiße ausgeführt, obwohl beide 
Vergleiche gleich sein sollte.

test[2] ist am Ende 100
und
test[3] ist 0

von Peter II (Gast)


Lesenswert?

(~(EEPROM_DatenWerte.versionderEepromstrukturInvertiert[0]))

liefert einen int

test[1] ist aber ein char - also erfolgt hier eine Konvertierung.

von Matthias F. (frank91)


Lesenswert?

Tatsächlich.

mache ich aus der Variable "test" ein int sehe ich dass nach dem 
Beschreiben die ersten Bits alle 1 sind.

liefert die Tilde dann immer einen Integer oder woran liegt das?

von Peter II (Gast)


Lesenswert?

Matthias F. schrieb:
> liefert die Tilde dann immer einen Integer oder woran liegt das?

jeder Operation liefert mindestens ein int.

von Matthias F. (frank91)


Lesenswert?

ok, vielen dank für die schnelle und verständliche Hilfe :-)

von Peter D. (peda)


Lesenswert?

Matthias F. schrieb:
> EEPROM_DatenWerte.versionderEepromstrukturInvertiert[0] =255;
...
> Alle Werte haben den Datentyp char.

Damit hast Du Dir selber nen Bock geschossen.
Man darf einen char zwar 255 zuweisen, aber der Compiler macht implizit 
-1 draus. Char geht nämlich nur von -128..+127.
Du must unsigned char nehmen oder besser uint8_t.

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.