Bits lesen/setzen
-
Habs fertig:
void setBit(unsigned char& Variable, int bitNum, bool newValue) { Variable = Variable ^ 1 << bitNum; }
Test:
setBit(a, 5, 0);// a ist 57, ergebnis: 25 //[..] setBit(a, 5, 1);//a is wida 57
-
Bloß schrieb:
wieso?
Weil ich beim AUfruf
setBit(&a,5);
am & sofort sehe, daß a verändert werden könnte.
Das hilft mir bei der Fehlersuche.
-
Ich bin für die Referenz, da es keinen Sinn macht, einen Nullzeiger zu übergeben.
-
Hmm volkard...
ich glaub sogar, es soll verändert werden - nicht nur weil die Funktion 'set' im Namen trägt
Ein hoch auf die transzendente Zahl!
-
Habs ausprobiert:
bool RegisterSet::getBit(int bitNum, u8 variable) { return variable & (1 << bitNum-1); } void RegisterSet::setBit(u8 *Variable, int bitNum, bool newValue) { *Variable = *Variable ^ newValue<<bitNum; }
u8 test = 64; theSet->setBit(&test, 6, 1); // Sollte Bit 6 auf 1 setzen -> 00000010 -> 00000110 bool theBit = theSet->getBit(&test, 7); // test = 0 | theBit = 0
Irgendwas läuft schief :S
-
Hacker schrieb:
Hmm volkard...
ich glaub sogar, es soll verändert werden - nicht nur weil die Funktion 'set' im Namen trägtIch erkenne es sogar bevor ich den Namen der Funktion überhaupt lese.
Und einen Zeiger zu übergeben heißt natürlich nicht, daß man 0 übergeben dürfte.
-
AHHH nein zähl von rechts, sowie der Computer und PI..
-
template <typename T> bool getbit(T& var, std::size_t bitnum) { return var & (1 << bitnum); } template <typename T> void setbit(T& var, std::size_t bitnum, bool value) { var = (var & ~(1 << bitnum)) | (value << bitnum); }
Ungetestet.
Edit: Könnte nun eher stimmen.
-
Wollt ich auch mit Templates machen..
@PI Wie kommst du auf diese Setter-Funktion? Kann nur falsch sein.
-
Ist mir auch gerade aufgefallen, ich korrigiere gerade.
-
Ämm guck grad
sa mal, wie heißt du eig. im IRC?Edit: is korrekt, meine art is aber cooler
so jetztemplate <class T> inline void setbit(T& var, std::size_t bitnum, bool value) { var = var ^ 1 << bitNum;; }
Ne, is falsch - korrigier grad
Edit: Ne, bleiben wir bei PI's funktion.
-
Hacker schrieb:
@PI Wie kommst du auf diese Setter-Funktion? Kann nur falsch sein.
Wieso?
EDIT: Ach deswegen.
EDIT2: Hat für mich im ersten Moment auch Sinn gemacht. Ich war wohl zu lange auf der Arbeit.
-
Deins ist auch falsch, da kommt value im Ausdruck nicht vor
P.S.: Ich bin nicht sicher, ob ich will, dass du meinen IRC Nick kennst
-
314159265358979 schrieb:
Ich bin nicht sicher, ob ich will, dass du meinen IRC Nick kennst
Wie ist der denn?
Jetz komm- zier dich nich so. Hacker ist auch ganz brav, versprochen.Edit: @_matze: du hast 'nen Job?
-
Du reagierst ja nicht mal.
-
-
Das Problem besteht leider weiterhin, ich kriege es einfach nicht hin einzelne Bits sauber zu lesen.
-
Dann sag ichs dir zum dritten Mal: Sag uns, wie die einzelnen Bits durchnummeriert werden sollen. Beispiele: 01234567, 12345678, 87654321, 76543210. Übrigens wurden auch schon funktionierende Beispiele gepostet. Wenn du sie nicht verstehst oder nicht ans Laufen bekommst, dann sag das.
-
Die Beispiele die hier gepostet wurden haben nicht richtig funktioniert, was genau war habe ich in einem Post vor diesem geschrieben.
Die bits sind so durchnummeriert: 012345678
-
Spongy schrieb:
Die Beispiele die hier gepostet wurden haben nicht richtig funktioniert, was genau war habe ich in einem Post vor diesem geschrieben.
Die bits sind so durchnummeriert: 012345678
Wenn es Dir möglich ist, ändere das.
Und dann nimm den Code von Wikipedia. http://en.wikipedia.org/wiki/Bit_manipulation