Wow, ich kann nicht alle der falschen Antworten glauben ..
Es ist wichtig, Verstehen Sie bitweise Mathematik, wenn Sie mit Flags arbeiten. In Ihrem Fall haben Sie die folgenden (für die erste Bedingung):
1 in binary is 00001
16 in binary is 10000
00001
& 10000
--------
00000
Also, sagen wir subtrahieren (2) als die operation
2 in binary is 00010
previous result is 00000
00010
& 00000
--------
00000
Da das vorherige Ergebnis ist 00000
alles und‘haben d mit wird es Null sein. Ihr Zustand wird also immer true
seit 0 == 0
.
Wenn wir nur Schalter sich dieser auf, dann haben wir folgendes:
1 in binary is 00001
16 in binary is 10000
00001
| 10000
--------
10001 (17)
Nun sagen wir Add (1)
als So operation
1 in binary is 00001
previous result is 10001 (17)
00001
& 10001
--------
00001
haben, 1 & 17 => 1
und damit Ihre endgültige Bedingung ist (1 & (1 | 16)) == (1 | 16)
=>1 & 17 == 17
=>1 == 17
=>false
(immer noch falsch!)
Also, was Sie eigentlich wollen, ist:
((operation | Operations.add | Operations.eval) & (Operations.add | Operations.eval)) == (Operations.add | Operations.eval)
Dies wird ((1 | 1 | 16) & (1 | 16)) == (1 | 16)
=>(17 & 17) == 17
=>17 == 17
== true
Dies ist natürlich nicht lesbar, so sollten Sie sich entscheiden, diese zum Extrahieren in eine Methode (wie vorgeschlagen). Aber es ist immer noch wichtig, zu verstehen, warum Ihr Zustand falsch ist.
Ist es nur ich, der denkt, dass [Flags] für die angezeigte Operation nicht korrekt ist? Ich habe Mühe, an eine reale Weltprobe zu denken, wo ich Flags auf mathematische Operationen gezeigt hätte ... – Sunny
Ich stimme Sunny zu. Die Flags sollten Zustände in einem Taschenrechner darstellen. Ich bin mir nicht sicher, warum ich es so gemacht habe. Im Nachhinein würde ich es heute nicht mehr so machen. –
Mögliches Duplikat von [Wie vergleicht man Flags in C#?] (Http://stackoverflow.com/questions/40211/how-to-compare-flags-in-c) –