Forum: Mikrocontroller und Digitale Elektronik Vergleich mit tilde


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Matthias F. (frank91)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
(~(EEPROM_DatenWerte.versionderEepromstrukturInvertiert[0]))

liefert einen int

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

von Matthias F. (frank91)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


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

von Peter D. (peda)


Bewertung
1 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.