Bits lesen/setzen
-
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 = 0Irgendwas 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ägt
Ich 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
-
Es wäre eigentlich schon wichtig, dass die Bits in dieser Reihenfolge ausgelesen werden können, da ich diese Funktionen wie gesagt in einer kleinen CPU-Emulation benutzen werde.
Die CPU arbeitet auch mit dieser Reihenfolge.
Was aber möglich wäre, irgendwie die Zahlen verändern, also z.B.:
7 -> 1
8 -> 0
6 -> 2
5 -> 3Dann könnte ich vor dem eigentlichen setBit oder getBit Aufruf die Zahl einfach verändern und diese dann auslesen lassen.