Bitmanipulation

Gast #2118669
Lesenswert?
• ▲
▼
Hallo,

ich hab ein Verständnisproblem zum oben genanten Thema.

wenn ich
1
#define T1 0x01
2
#define T2 0x02
3

4
unsigned char tmp = T1 | T2;
5

6
if(tmp & T1) {
7
   //bla
8
}
9

10
if(tmp & T2) {
11
   //bla
12
}

Wie genau wird einmal auf T1 und einmal auf T2 geprüft? Und woher 
erkennt er den unterschied?

tmp ist 0b00000110. Wie genau erfolgt der Vergleich auf T1 und T2?
#2118685
Lesenswert?
• ▲
▼
Teer schrieb:
> d.h. aber auch
>
>
1
> #define T1 0x01
2
> #define T2 0x02
3
> #define T3 0x03
4
> 
5
> unsigned char tmp = T1 | T2 | T3;
6
>
>
> wäre garnicht möglich? Weil wenn es richtig ist, verstehe ich das
> Prinzip.

#define T3 0x03
würde im diesem Fall 0x00000011 ergeben, was das selbe ist wie T1|T2.
Wenn dann müsste man schreiben
#define T3 0x04
denn dann hättest du das nächste bit gesetzt. Sowas macht man gerne für 
Masken (Status, Fehlercode etc).
Damit man sich mit den Einsen nicht vertut könnte man es aber auch so 
schreiben
1
#define T1 (1<<0)
2
#define T2 (1<<1)
3
#define T3 (1<<2)
4
#define T4 (1<<3)

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.