mikrocontroller.net

Forum: Compiler & IDEs 8 bit Bitmanipulation casten, sonst 16 bit?


Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist das noch aktuell?

http://www.nongnu.org/avr-libc/user-manual/FAQ.htm... :

Why *does* the *compiler* compile *an* 8-bit *operation* that 
uses *bitwise* operators *into* a *16-bit* operation *in* 
*assembly?*

Bitwise operations in Standard C will automatically promote their 
operands to an int, which is (by default) 16 bits in avr-gcc.

To work around this use typecasts on the operands, including literals, 
to declare that the values are to be 8 bit operands.

This may be especially important when clearing a bit:
var &= ~mask;  /* wrong way! */

The bitwise "not" operator (~) will also promote the value in mask to an 
int. To keep it an 8-bit value, typecast before the "not" operator:
var &= (unsigned char)~mask;"

Autor: Klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Why does the compiler compile an 8-bit operation that
> uses bitwise operators into a 16-bit operation *in*
> *assembly?*

War dir langweilig, oder bist du einfach nur geistig verwirrt? ;)


Zum Thema: ich konnte so ein Verhalten GCC bisher nicht beobachten. Ich 
benutze keine solchen casts, und der gcc hat mir das immer brav in 8 Bit 
Operationen ausgeführt. Welche Version ich benutzt hab, weiß ich gerad 
nicht, aber es war auf jedenfall eine halbwegs aktuelle.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
5 Sekunden: " " -> "* *"

Danke für die Antwort.

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.