abgerufen werden Manchmal stoße ich auf den folgenden Code. Ich glaube, dass es verwendet wird, um Werte als Bits darzustellen, und sie können zu einer einzigen Zahl kombiniert und später abgerufen werden.Wie Bits von Nummer
Die Zahl 34 besteht aus 01000000
und 00000100
oder 2
und 32
. Wie arbeite ich das in Java aus? Irgendwie muss ich 2 mit einer Variablen vergleichen, um X
und 32 tot eine andere Variable zu tun, Y
zu tun.
Das folgende ist ein Beispiel mit einigen meiner Gedanken.
aus dem DotA Modding-Wiki.
DOTA_ABILITY_BEHAVIOR_HIDDEN = 1 << 0, //Can be owned by a unit but can't be cast and won't show up on the HUD.
DOTA_ABILITY_BEHAVIOR_PASSIVE = 1 << 1, //Cannot be cast like above but this one shows up on the ability HUD.
DOTA_ABILITY_BEHAVIOR_NO_TARGET = 1 << 2, //Doesn't need a target to be cast, ability fires off as soon as the button is pressed.
DOTA_ABILITY_BEHAVIOR_UNIT_TARGET = 1 << 3, //Needs a target to be cast on.
DOTA_ABILITY_BEHAVIOR_POINT = 1 << 4, //Can be cast anywhere the mouse cursor is (if a unit is clicked it will just be cast where the unit was standing).
DOTA_ABILITY_BEHAVIOR_AOE = 1 << 5, //Draws a radius where the ability will have effect. Kinda like POINT but with a an area of effect display.
//...
Also dieses „Verhalten“, wie 1 gespeichert bekommen, 2, 4, 8, 16, 32, usw. Aber die ganze Idee scheint mehrere Arten in ein einzige Zahl/Bytes speichern zu können und diese später abrufen. Ich sehe Verwendungen wie folgt aus:
DOTA_ABILITY_BEHAVIOR_AOE | DOTA_ABILITY_BEHAVIOR_PASSIVE
Welche 34
zu sein scheint. Die einzige Kombination, die 34 ergeben würde, wäre diese und ich glaube, dass jede Kombination auf diese Weise einzigartig wäre, solange Sie nicht den gleichen Wert zweimal verwenden.
Wie kann ich diese beiden Nummern von der Nummer 34
abrufen? Und gibt es irgendwelche Einschränkungen in der Verwendung?
Sidequestion: Ich bekomme Binärliterale werden nicht auf dieser Sprache Ebene unterstützt. Vielleicht ist es verwandt mit '(34 & 2 == 2)' ergibt den Fehler 'operator & kann nicht auf int angewendet werden ' – Madmenyo
Das ist einfach ein Problem mit der Priorität: 34 & 2 == 2 bedeutet 34 & (2 == 2), Das verursacht den Compiler-Fehler, dass das Bitwise-and (&) nicht auf Int und Boolean angewendet werden kann. Verwenden Sie Klammern ((34 & 2) == 2) und alles ist in Ordnung. –
Vorrang von Operatoren in Java: http://introcs.cs.princeton.edu/java/11precedence/ –