Bitweise Operatoren
Matthias Bo
- php
0 Rouven0 Matthias Bo0 steckl
2 dedlfix3 Steffen Weber0 Matthias Bo1 Der Martin0 dedlfix
Hallo zusammen..
Ich habe mal eine Frage zum Bitweisen Programmieren. Es geht darum, dass ich keine Lösung dafür finde ein Bestimmtes Bit in einem Binären Ausdruck zu Ändern.
Beispiel:
Dezimal 5 wäre in Binärer Schreibweise 0101
Wie kann ich jetzt mit das zweite Bit auf 1 setzen ohne die anderen zu Ändern?
Wenn ich die Bits nach links oder rechts verschiebe, werden ja alle verschoben. Ich will aber eigentlich nur das eine Bit ändern. Gibt es eine Möglichkeit einfach nur den Wert 0 oder 1 an eine bestimmte Stelle in einem Binären Ausdruck zu schieben?
Vielen Dank für eine Antwort.
Hello,
Gibt es eine Möglichkeit einfach nur den Wert 0 oder 1 an eine bestimmte Stelle in einem Binären Ausdruck zu schieben?
ODER dürfte klappen...
0101 OR 0010 = 0111
MfG
Rouven
Hallöchen,
ODER dürfte klappen...
0101 OR 0010 = 0111
das sollte klappen, stimmt. Allerdings suche ich nach einer Möglichkeit nur ein bestimmtes Bit zu bearbeiten. Das heisst, ich würde gern ein bestimmtes Bit prüfen und anschliessend ändern. Deine Möglichkeit würde ja voraussetzen, dass ich vorher weiss, ob das Bit gesetzt ist oder nicht, wenn ich das richtig sehe. Gibt es dafür auch eine Möglichkeit?
Viele Grüße
Hi,
ODER dürfte klappen...
0101 OR 0010 = 0111
das sollte klappen, stimmt. Allerdings suche ich nach einer Möglichkeit nur ein bestimmtes Bit zu bearbeiten. Das heisst, ich würde gern ein bestimmtes Bit prüfen und anschliessend ändern.
Deine Möglichkeit würde ja voraussetzen, dass ich vorher weiss, ob das Bit gesetzt ist oder nicht, wenn ich das richtig sehe.
Ich denke du siehst es falsch. Mit "OR 0010" setzt du immer genau das vorletzte Bit, alle anderen bleiben unveraendert. Fuer das letzte Bit muesstest du dann eben "OR 0001" verwenden, usw ...
Um zu wissen ob das entsprechende Bit vorher gesetzt war koenntest du die Ausgangszahl mit dem Ergebnis der OR-Operation vergleichen.
mfG,
steckl
echo $begrüßung;
Ich habe mal eine Frage zum Bitweisen Programmieren. Es geht darum, dass ich keine Lösung dafür finde ein Bestimmtes Bit in einem Binären Ausdruck zu Ändern.
Bit setzen (wurde schon genannt):
xxxx
OR 0010
= xx1x
Bit löschen:
xxxx
AND 1101
= xx0x
Bit testen:
xxxx
AND 0010
= 00x0 Wenn das Ergebnis 0 ist, war das Bit nicht gesetzt, ansonsten ist es größer als 0.
echo "$verabschiedung $name";
Tag,
Bit setzen (wurde schon genannt):
xxxx
OR 0010
= xx1xBit löschen:
xxxx
AND 1101
= xx0xBit testen:
xxxx
AND 0010
= 00x0 Wenn das Ergebnis 0 ist, war das Bit nicht gesetzt, ansonsten ist es größer als 0.
Ergänzend wär dann noch Bit ändern.
xx1x xx0x
XOR 0010 XOR 0010
= 0000 = 0010
Javascript-Operator ^=
Grüße,
Steffen.
Hallo Steffen,
Ergänzend wär dann noch Bit ändern.
xx1x xx0x
XOR 0010 XOR 0010
= 0000 = 0010Javascript-Operator ^=
Das ist nicht korrekt.
xx1x xx0x
XOR 0010 XOR 0010
= xx0x = xx1x
Jonathan
Hi,
Ergänzend wär dann noch Bit ändern.
xx1x xx0x
XOR 0010 XOR 0010
= 0000 = 0010Javascript-Operator ^=
Das ist nicht korrekt.
xx1x xx0x
XOR 0010 XOR 0010
= xx0x = xx1x
hm wenn mich nicht alles täuscht habt ihr beide unrecht, denn dieses beispiel kann man nicht mit algemeinen "x" darstellen, denn für eine bitweise xor verknüpfung müssen beide werte unterschiedlich sein also x xor 1 kann man nicht angeben und x xor 0 kann man auch nicht angeben solange man das x nicht kennt. Die xor verknüpfung ist eine entweder oder aber nicht gleich verknüpung (klingt irgendwie komisch).
Beispiel:
1 xor 0 = 1
0 xor 1 = 1
1 xor 1 = 0
0 xor 0 = 0
Grüße Flo
Hallo Flo,
hm wenn mich nicht alles täuscht habt ihr beide unrecht, denn dieses beispiel kann man nicht mit algemeinen "x" darstellen
Doch kann man.
Etwas XOR 0 ist immer der Ausgangswert. Etwas XOR 1 ist immer der invertierte Wert.
xx1x xx0x
XOR 0010 XOR 0010
= xx0x = xx1x
Beispiele:
1111
XOR 0010
= 1101
0010
XOR 0010
= 0000
1010
XOR 0110
= 1100
x xor 1 kann man nicht angeben und x xor 0 kann man auch nicht angeben solange man das x nicht kennt.
Doch.
x XOR 0 = x
x XOR 1 = NOT x (bzw. 1-x)
(Natürlich nur sofern x nur ein Bit ist.)
Jonathan
Hallo,
also brauche ich fürs Setzen und zum Prüfen immer einen zweiten Binären Wert zum Vergleich. Ich kann also nicht einen Wert nehmen und einfach ein it setzen. Verstehe ich das richtig?
Hallo Matthias,
also brauche ich fürs Setzen und zum Prüfen immer einen zweiten Binären Wert zum Vergleich.
nö, nur eine Konstante, die das zu prüfende Bit widerspiegelt.
Beispiel:
~~~javascript
// Zufallszahl im Bereich 0..255 ermitteln
var x = Math.floor(Math.random()*256);
// Prüfen, ob Bit 5 gesetzt ist (2^5 = 32 = 0x20 = binär 00100000)
if (x & 0x20)
{ alert("Bit 5 war gesetzt.");
}
> Ich kann also nicht einen Wert nehmen und einfach ein it setzen. Verstehe ich das richtig?
Weiß ich nicht - denn ich fürchte, ich verstehe \*dich\* nicht richtig. ;-)
So long,
Martin
--
[Gültig](http://community.de.selfhtml.org/zitatesammlung/zitat134) sind Frauen ab 16, wohlgeformt ab 160 Pfund.
(Gunnar Bittersmann)
echo $begrüßung;
also brauche ich fürs Setzen und zum Prüfen immer einen zweiten Binären Wert zum Vergleich.
nö, nur eine Konstante, die das zu prüfende Bit widerspiegelt.
Oder zur Laufzeit einen Wert erzeugen:
1 << (position_von_rechts - 1)
schiebt ein Bit an eine bestimmte Position. Durch bitweise Negation lässt sich daraus auch ein Null-Bit zwischen Einsen erzeugen.
echo "$verabschiedung $name";
Hallo,
nur eine Konstante, die das zu prüfende Bit widerspiegelt.
Oder zur Laufzeit einen Wert erzeugen:
1 << (position_von_rechts - 1)
das Prinzip ist mir auch geläufig, nur die "-1" ist da irgendwie fehl am Platz. Damit würdest du ja für das Bit 0 einen Schiebe-Zähler von -1 erhalten!
Ich weiß, immer dieses Plus/Minus-Eins-Problem ... ;-)
So long,
Martin
Moin!
Oder zur Laufzeit einen Wert erzeugen:
1 << (position_von_rechts - 1)
Sowas ist aber in PHP nicht schön, weil da kein Compiler den statischen Wert erkennt und generiert. Ich würd's jedenfalls nicht so programmieren. :)
- Sven Rautenberg