Wie kann ich ein Bit aus einem Byte lesen?
-
Hallo!
Mit "byte |= 1<<Bitnummer;" kann ich ein Bit in einem Byte schreiben. Wie kann ich aber ein beliebiges Bit wieder aus einem Byte auslesen?
Viele Grüße
pmw
-
mit & statt |
-
bool isBitSet = (value & (1 << n)) != 0;
(1<<n) erzeugt einen Integer bei dem nur Bit N gesetzt ist. Bitweises und (&) ergibt bur dann != 0, wenn das Bit auch in value gesetzt ist.
-
Hi!
Danke für die schnellen Antworten. Leider klappt es bei mir aber nicht richtig. Es kommt als Ergebnis immer eins raus.
bool LeseNaechstesBit(unsigned char &IStelleBit, unsigned long &IStelleByte, unsigned char *AQuelle) { if (IStelleBit > 7) { IStelleBit = 0; ++IStelleByte; } return ((AQuelle[IStelleByte-1] & (1 << IStelleBit)) != 0); ++IStelleBit; }
Viele Grüße
pmw
-
alles was nach return steht, wird nicht mehr ausgeführt.
das !=0 ist unnötig
-
das !=0 ist unnötig
ach und mir was erzählen wenn ich if(a-b) verwende...
hehe jetzt hab ich dich erwischt
-
Leider klappt es immer noch nicht - Aus dem unsigned char "229" (10100111) wird (10000...)
bool LeseBit(unsigned char &IStelleBit, unsigned long &IStelleByte, unsigned char *AQuelle) { if (IStelleBit > 7) { IStelleBit = 0; ++IStelleByte; } ++IStelleBit; return (AQuelle[IStelleByte-1] & (1 << IStelleBit-1)); }
-
Windalf schrieb:
ach und mir was erzählen wenn ich if(a-b) verwende...
hehe jetzt hab ich dich erwischt??
Schreibst du etwa
if(a-0) { stuff(); }
??
-
Schreibst du etwa
if(a-0) { stuff(); }nö ich schreibe nur if(a) und genauso schreibe ich auch if(a-b)
-
Windalf schrieb:
nö ich schreibe nur if(a)
Dann lies meinen Beitrag nochmal und spar dir dann die doofen kommentare
und genauso schreibe ich auch if(a-b)
zum glück muss ich deinen code nicht lesen - sowas ist ja krank
-
Dann lies meinen Beitrag nochmal und spar dir dann die doofen kommentare
also die begründung versteh ich jetzt nicht... (ok ein bisschen provozieren war natürlich mit bei...
)
aber in dem fall stand da return (x&y) !=0...
jetzt sagst du es ist blödinn !=0 zu verwenden weil das das gleiche ist wie
return x&y; weil der vergleich obs ungleich false ist keine änderung des boolschen ausdrucks bringt... (true!=false ist true und false!=false ist false und damit ist der vergleich überflüssig)
soweit lieg ich doch richtig oder?
wenn ja versteh ich nicht was an x&y als boolschen ausdruck zu interpretieren weniger verwerflich sein soll als a-b?
-
Weiß keiner bei meinem Problem weiter?
-
@pmw:
1 << 7 == 10000000 (binary)
10100111 & 10000000 == 10000000 ( != 0)
00100111 & 10000000 == 00000000 ( == 0)dein code sieht eigentlich gut aus....
-
Leider kommt aber anstatt "10100111" "10000000" raus? Wie kann das sein?
10100111 & (1 << 0) = 1 richtig
10100111 & (1 << 1) = 0 richtig
10100111 & (1 << 2) = 0 falsch (sollte 1 sein)
10100111 & (1 << 3) = 0 richtig
10100111 & (1 << 4) = 0 richtig
10100111 & (1 << 5) = 0 falsch (sollte 1 sein)
10100111 & (1 << 6) = 0 falsch (sollte 1 sein)
10100111 & (1 << 7) = 0 falsch (sollte 1 sein)
-
Zählt "IStelleByte" bei 1 los? Das ist ein bißchen unklar: bit geht von 0..7, byte von 1..N
-
Ja, zählt von 0-7 durch.
-
IStelleByte von 1 ??
-
Windalf schrieb:
wenn ja versteh ich nicht was an x&y als boolschen ausdruck zu interpretieren weniger verwerflich sein soll als a-b?
Echt nicht???
OMG
Hiermit höre ich auf mit dir über Stil zu reden.
nur ein kleiner Tip:
(x&y)!=0 entspricht in etwa (a-b)!=0
-
Echt nicht???
OMG
Hiermit höre ich auf mit dir über Stil zu redenlol
Ich hatte eigentlich gedacht das ich das Duell gegen dich verliere... mit einem unentschieden bin ich mehr als zufriedenP.S.: hoffentlich fühlt sich der -operator nicht jetzt von dir diskrimieniert, weil du dem & mehr Freiheiten einräumst...
-
Windalf schrieb:
P.S.: hoffentlich fühlt sich der -operator nicht jetzt von dir diskrimieniert, weil du dem & mehr Freiheiten einräumst...
tu ich nicht.
denk mal scharf nach warum. vielleicht kommst du ja drauf. nen tipp habe ich vorher schon gegeben.