Bitweise Operationen
-
Guten Morgen!
Hat jemand einen Vorschlag, mit welchen bitweisen Operationen ich aus
00000 mit Maske 11000 und 11100 das Ergebnis 00100 erhalte? Ich hab keine Ahnung.
Zusätzlich sollte auch bei 11000 mit Maske 11000 und 00000 das Ergebnis 11000 rauskommen.Ich muss also quasi über die Maske hinweg bitweise exklusiv oder anwenden.
-
Kannst du mal erklären, was du mit Werten und Masken meinst? Irgendwie blicke ich bei deiner Fragestellung nicht durch, was du vorhast.
-
Das waren eigentlich nur zwei Beispiele. Ich habe drei Variablen. (Short Word). Zwei davon haben bestimmte Masken, belegen also bestimmte Bits in der dritten Variable. Jetzt muss ich diese zwei Variablen aber ein- bzw. ausschalten können. Ich weiß aber nicht, wie ich quasi nur die Bits von der dritten Variable ändern kann, wo sich etwas ändern soll, weil ich z.B. die eine Variable auf 0 setze.
-
Wenn ich mir deine Beiden Beispile ansehe, benötigst du offenbar "val = mask1 ^ mask2" (XOR-Verknüpfung). Aber ich weiß nicht, wie das mit anderen Beispielen aussieht.
PS: Mit "x |= (1<<n);" schaltest du das n-te Bit in x an, mit "x &= ~(1<<n);" schaltest du es wieder aus.
-
Danke, das hat mir schon geholfen.
-
00000 mit Maske 11000 und 11100 das Ergebnis 00100 erhalte?
(00000 | 11000) ^ 11100 = 00100
11000 mit Maske 11000 und 00000 das Ergebnis 11000
(11000 & 11000) | 00000 = 11000
Meinst du sowas?
-
Eigentlich war mein Problem, dass ich verpeilt hab, wie ich die Maske richtig anwenden kann. Ich musste im Prinzip nur die auszublendende Variable mit der Maske verunden sowie die Gesamtvariable mit der invertierten Maske. Verodern führt zum Ergebnis.
(00000 & 11000) | (11100 & (~11000)) = 00100
(11000 & 11000) | (00000 & (~11000) = 11000Aber danke für die Mühe