Einfache Bitmasking Frage

29/04/2009 - 13:57 von Martin Kleiner | Report spam
Hi

Habe eine ganz einfache Frage: Ich hab eine 32-bit integer in welchem
ich einzelne Flags abspeichere.
Nun moechte ich rausfinden, ob testflag1 bzw. testflag2 gesetzt sind
oder nicht. Das ganze haut
hin, falls ich den shift operator verwende. Nun wuerde mich auch
interessieren, ob das ohne das shiften moeglich ist?

#include<stdio.h>
#define testflag1 0x00000040
#define testflag2 0x00000004

int main()
{

unsigned int flags = 0x00000040;

if (((flags >> 6) & 1) == 0x1)
printf("Testflag Set!");


printf("flags && testflag1 %0x" ,flags && testflag1);
printf("flags && testflag2 %0x" ,flags && testflag2);

printf("flags & testflag1 %0x" ,flags & testflag1);
printf("flags & testflag2 %0x" ,flags & testflag2);

return (0);
}

Habe es mit & bzw && versucht aber wie erwartet kommt da nicht das
gewuenschte Ergebnis raus. Hat jemand andere Ideen wie ich dieses Flag
direkt abfragen kann?

Program Output:
Testflag Set!
flags && testflag1 1
flags && testflag2 1
flags & testflag1 40
flags & testflag2 0
 

Lesen sie die antworten

#1 Claus Reibenstein
30/04/2009 - 00:16 | Warnen spam
Martin Kleiner schrieb:

Habe eine ganz einfache Frage: Ich hab eine 32-bit integer in welchem
ich einzelne Flags abspeichere.



Ob das 32 Bit sind, ist irrelevant.

Nun moechte ich rausfinden, ob testflag1 bzw. testflag2 gesetzt sind
oder nicht. Das ganze haut
hin, falls ich den shift operator verwende.



Was willst Du denn mit dem Shift?

Nun wuerde mich auch
interessieren, ob das ohne das shiften moeglich ist?



Eigentlich testet man solche Flags _immer_ ohne Shift.

#include<stdio.h>
#define testflag1 0x00000040
#define testflag2 0x00000004

int main()
{

unsigned int flags = 0x00000040;

if (((flags >> 6) & 1) == 0x1)



if (flags & testflag1)

printf("Testflag Set!");


printf("flags && testflag1 %0x" ,flags && testflag1);
printf("flags && testflag2 %0x" ,flags && testflag2);



'&&' ist ein boolescher Operator und kein Bit-Operator. Damit werden
boolesche Werte verknüpft.

printf("flags & testflag1 %0x" ,flags & testflag1);
printf("flags & testflag2 %0x" ,flags & testflag2);

return (0);



Die Klammern sind überflüssig.

}

Habe es mit & bzw && versucht aber wie erwartet kommt da nicht das
gewuenschte Ergebnis raus.



Welches ist denn Dein gewünschtes Ergebnis?

Hat jemand andere Ideen wie ich dieses Flag
direkt abfragen kann?

Program Output:
Testflag Set!
flags && testflag1 1
flags && testflag2 1
flags & testflag1 40
flags & testflag2 0



Was gefàllt Dir an diesem Ergebnis nicht?

Gruß. Claus

Ähnliche fragen