Java Bitoperationen, bit gesetzt oder nicht?
Moin,
ich kann ja mit folgender Funktion fragen ob ein bit an einer bestimmten Stelle gesetzt ist:
Alles am beispiel
Num = 5
i = 2
if (((num & (1 << i)) != 0)) {
args
}
Das Prinzip habe ich so grob verstanden, jedoch "verUnde" ich ja die 5 (Also einen Integer, nicht in binär!??) mit der Bitmaske bzw. dem auf die entsprechende Stelle verschobenen Bit. Dann muss die 5 doch als binär interpretiert werden oder nicht? ansonsten kann ich das ganze doch nicht vergleichen.. ich hoffe man versteh meine frage XD
MfG
2 Antworten
Ja, die 5 wird binär interpretiert, weil der Operator int & int === > int binär funktioniert.
int hat 32 Bit.
Alle 32 Bit vom 1. Argument werden mit dem korrespondierenden Bit des 2. Argument mit Binär-UND verknüpft. Als Ergebnis hast du wieder ein int mit 32-Bit.
5 = 00000000 00000000 00000000 00000101
Für i = 2 ist (1<<i) = 00000000 00000000 00000000 00000100
Damit hast du an der drittletzten Stelle eine Übereinstimmung von den Bits der beiden Argumente, die gesetzt sind. Damit ist dann auch im Ergebnis (n & (1 << i)) ein Bit an der Stelle gesetzt und der Wert von (n & (1 << i)) = 4 = 1 << 2. Der Wert ist != 0.
Dir sollte bekannt sein, dass Im Computer prinzipiell ALLES binär gespeichert ist?
Mit den binären Operatoren operierst du auf den Bits einer Variablen, die Variable wird nicht erst in Bits konvertiert, sie besteht bereits aus Bits.
vielen Lieben dank, Top erklärt.