Bits genau setzen ?
-
Das kann ja nicht stimmen oder?
p[(Nr-1)/32] = p[(Nr-1)/32] | (1<<( (Nr-1)%32 ));
Klar stimmt das so, warum auch nicht? [/quote]
p[(Nr-1)/BITS] &= ~(1<<((Nr-1)%BITS));
das wäre dann auch richtig?
p[(Nr-1)/BITS] = p[(Nr-1)/BITS] & ~(1<<((Nr-1)%BITS));
-
Wenn ich jetzt keinen Tippfehler übersehen habe, ja.
-
Pelle schrieb:
unsigned int iLagerplaetze[4]; // 128 Bits int temp;
Na, mit Sicherheit NICHT 128 Bit ... eher hatte da jemand 128 Bit intus
Was machst Du Dir Gedanken um den Platz von 128 Bit oder Byte und willst an Bits frickeln, wenn Du dann auf diese Weise Speicher vergeudest.
Mit den Mehrfachdivisionenp[(Nr-1)/32] = p[(Nr-1)/32] | (1<<( (Nr-1)%32 ));
verläßt man sich auf die Optimierung des Compilers, aber es gibt wirklich welche, die (Nr-1)/32 mehrfach ausrechnen.:p
Performance dahin, kaum Platz gespart ... *keine gute Idee*, nur um nicht Schwachsinn
sagen zu müssen
-
pointercrash() schrieb:
Performance dahin, kaum Platz gespart ... *keine gute Idee*, nur um nicht Schwachsinn
sagen zu müssen
eben drum, ich hatte weiter oben ein paar schicke macros gepostet (zwar mit flüchtigkeitsfehlern drin), aber davon will ja keiner was wissen.
-
macro-troll schrieb:
eben drum, ich hatte weiter oben ein paar schicke macros gepostet (zwar mit flüchtigkeitsfehlern drin), aber davon will ja keiner was wissen.
doch, ich !
und zwar wieso &3 den selben wert wie %4 liefert.
kann man das irgendwie mathematisch zeigen ?
also im moment komme ich nicht drauf wie.
-
macro-troll-fan schrieb:
kann man das irgendwie mathematisch zeigen ?
ich kanns zwar nicht mathematisch zeigen, aber im binärsystem funzt dieses speed-modulo auch nur mit zweierpotenzen. alle stellen rechts vom teiler müssen 0 sein, dann isses ohne rest teilbar. in anderen zahlensystemen ist es ja so ähnlich, also im zehnersystem bei allen teilern, die selber glatt durch die basis teilbar sind usw...
-
macro-troll-fan schrieb:
macro-troll schrieb:
eben drum, ich hatte weiter oben ein paar schicke macros gepostet (zwar mit flüchtigkeitsfehlern drin), aber davon will ja keiner was wissen.
doch, ich !
und zwar wieso &3 den selben wert wie %4 liefert.
kann man das irgendwie mathematisch zeigen ? ...ÖÄhmm, im Prinzip schon, aber es will ja keiner was davon wissen, so why ...
-
pointercrash() schrieb:
macro-troll-fan schrieb:
macro-troll schrieb:
eben drum, ich hatte weiter oben ein paar schicke macros gepostet (zwar mit flüchtigkeitsfehlern drin), aber davon will ja keiner was wissen.
doch, ich !
und zwar wieso &3 den selben wert wie %4 liefert.
kann man das irgendwie mathematisch zeigen ? ...ÖÄhmm, im Prinzip schon, aber es will ja keiner was davon wissen, so why ...
wenn es niemand wissen wollte, dann würde auch niemand danach fragen.
-
der wissbegierige schrieb:
wenn es niemand wissen wollte, dann würde auch niemand danach fragen.
Dachte, Du willst mich veralbern
mit %4 führst Du eine Modulo- Division durch. Bei /4 würdest Du im Binärsystem zweimal rechts shiften, also /2 /2. Was da überbleibt, ist das Ergebnis der Integer- Division, was Du nach rechts rausgeshiftet hast, ist der Modulo- Rest. Das sind die unteren beiden Bits und die kannst Du genausogut (naja, zumeist schneller) durch Verundung gewinnen. Daß bei 3 die unteren beiden Bits gesetzt sind, muß ich nicht gesondert erklären, oder?
Genügt die anschauliche Erklärung, oder soll ich den Bronstein zücken und von dort aus dem Abschnitt Zahlensysteme rezitieren?
-
pointercrash() schrieb:
Daß bei 3 die unteren beiden Bits gesetzt sind, muß ich nicht gesondert erklären, oder?
nööööööööö
pointercrash() schrieb:
Genügt die anschauliche Erklärung, oder soll ich den Bronstein zücken und von dort aus dem Abschnitt Zahlensysteme rezitieren?
Nö, nicht nötig, die Erklärung ist spitze
Danke dafür.Also ich es mir aufgeschrieben und mit diversen Zahlen probiert habe, hab ich es auch geblickt *stolz*
Also, wenn ich %4 haben will, schreibe ich &3.
Möchte ich %8, schreibe ich &7.
Will ich %16 kann ich dafür &15 setzen.
%32 -> &31 usw.Also ist immer %(2^x) gleichwertig mit &(2^x-1)
Jetzt hab auch ich es kapiert