Bei byte auf einzelne Bits zugreifen
-
Wie kann man bei dem Typen byte auf die einzelnen bits zugreifen?
ich möchte den Status von mehreren Dingen darin abspeichern, und eben dann auch wieder abfragen. Schade das es nicht so wie bei string einfach mit den []Klammern geht.
so ne abfrage wiebyte by[3] == 1
wäre echt fein.
-
System::Collections::BitArray
-
Ein Prozessor kann i.d.R. nicht auf einzelnen Bits arbeiten, sondern mindestens Byte-weise.
Du kannst dir also dein Byte holen, lass es 10011101 sein. Wenn dich das vorletzte Bit interessiert, musst du es mit einer entsprechenden Maske bitweise UND-Verknüpfen:10011101 00000010 -------- 00000000
Ergebnis: Das vorletzte Bit war null, amsonsten wäre das Ergebnis != 0. In C# geht das UND-Verknüfen mit &.
byte a = ?; byte mask = 2; // vorletztes Bit. Leute schreiben sowas immer gern 0x2 if( a & mask ) ...
-
Da ich jedes einzelne Bit brauche, hab ich es folgend gelöst:
byte b; for( int i=0; i<8; i++ ){ if( b >= 128 ) { // es liegt eine Eins vor } else { // es liegt eine Null vor } b = b << 1; }
Beim beschreiben berechne ich halt den gewünschten int Wert;
-
Warum denn nicht so?
enum WERTE { A = 0x00000001 , B = 0x00000010 , C = 0x00000100 , D = 0x00001000 , E = 0x00010000 , F = 0x00100000 , G = 0x01000000 , H = 0x10000000 }; int speicher = 0; // A und B setzen: speicher |= A; speicher |= B; // Ist A gesetzt? if(speicher & A) == A) { // Ja, A ist gesetzt. // Jetzt löschen wir A wieder speicher &= ~A; }