Hi. Ich suche nach einer eleganten Möglichkeit ein Bit in einem String zu prüfen. Der Hintergrund ist der, das im Statusbyte die Brauchbarkeit des Strings verschlüsselt ist, d.h. ist Bit 2 im 15. Zeichen 0 ist der String unbrauchbar. Bei 7 relevanten Bit bleiben da immerhin einige Möglichkeiten. Gibt es da etwas besseres, als If(timestring[15] == 0x02 || timestring[15] == 0x03 || timestring[15] == 0x06 || timestring[15] == 0x07 ....
Das lässt sich mit einem logischen UND lösen: if (!(timestring[15] & 4)) { // ungültig } 4 ist der numerische Wert von Bit 2 (angenommen, daß richtig gezählt wird).
@Rufus Was Du schreibst ist sicher richtig, aber ich verstehe es nicht ganz 1. Logisch UND habe ich immer als && geschrieben. Mache ich was falsch? 2. Wenn ich etwas mit 4 via und verknüpfe, was kommt dann dabei raus? Ich würde jetzt denken, dass nur dann True rauskommt, wenn mein Verknüpfungsparter == 4 ist?! OK in menem Fall wäre es 2 weil ich bit0 als 1. Bit gezählt habe, aber das ist im Endeffekt ja unerheblich @Rolf etwas wie : If(timestring[15] == timestring[15] |= (1 << 2)) ??
gemeint war nicht logisches sondern bitweises oder. also zb: 0b10011010 & 0b00110000 = 0b00010000 dh, da wo an beiden stellen ne 1 ist, kommt ne 1 raus. benutzt man gerne zum "maskieren" von bits. also genau das, was du willst...
> 1. Logisch UND habe ich immer als && geschrieben. Mache ich was > falsch? Du willst kein logisches Und, sondern ein bitweises. Bei ersterem wird der ganze Wert als logisch falsch angesehen, wenn er 0 ist, als wahr, wenn er 1 ist. Bei letzterem wird jedes Bit einzeln verknüpft. > 2. Wenn ich etwas mit 4 via und verknüpfe, was kommt dann dabei > raus? 4 wenn das entsprechende Bit in dem "etwas" gestetzt ist, sonst 0. > @Rolf > etwas wie : > If(timestring[15] == timestring[15] |= (1 << 2)) > ?? Nein, eher: if(timestring[15] & (1 << 2))
meine natuerlich bitweises und... ach ja: 1<<0 = 0b00000001 1<<1 = 0b00000010 1<<2 = 0b00000100 3<<4 = 0b00110000 usw.. quasi "schieben" auf bitebene...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.