Moin!
Nein, die zwei Ausdrücke sind nicht identisch.
Stimmt, danke für das Beispiel!Prüfst du deine Hypothesen nicht anhand von ein paar kleinen Programmbeispielen?
Mit bitweisem XOR kann man das Ziel, wenn auch mit gegensätzlichem Ergebnis, erreichen. Zwei gleiche Werte löschen sich zu 0 aus, alles andere ergibt ein von 0 verschiedenes Ergebnis.
Man sollte bei solchen Gedanken aber immer auch die Frage nach der zugehörigen Motivation stellen: Warum will da jemand eine offensichtliche Operation (Vergleich) durch eine nicht-offensichtliche Operation (Bitoperator als Ersatz für einen Vergleich) einsetzen?
Die einzige Antwort, die ich an dieser Stelle gelten lassen würde: Performance.
Wobei derjenige auch dafür erst den Beweis antreten muss, indem er den tatsächlich generierten Bytecode des Compilers für beide Varianten analysiert und anhand von Taktzyklen für jedes denkbare Input-Szenario beweist, dass die eine Variante besser ist, als die andere.
Im Grunde genommen diskutieren wir hier also den extrem seltenen Fall, dass jemand auf Hardware mit beschränkter Leistungsfähigkeit (im Vergleich zur erledigenden Aufgabe) Mikrooptimierung betreiben will.
Im allgemeinen hingegen werden beide Varianten vermutlich kaum 1% Unterschied in der Ausführungsgeschwindigkeit haben, so dass vollkommen andere Effekte in den Vordergrund treten, nämlich: Ist der "optimierte" Code lesbarer, als der offensichtliche Code? Das hat auf die Ausführungsperformance des Codes zwar keinen Einfluß, sehr wohl aber auf die Performance des Programmierers, der sich mit dem "optimierten" Code herumschlagen muss. Ihn also mehrfach nach seiner Erstellung lesen muss und immer wieder denkt: "WTF? Was tut das?" Durch solche Performancebremsen mit unleserlichem Code dürften im Endeffekt viel mehr Kosten generiert werden, als durch die gewonnene Performance einsparbar wären. Spätestens wenn sich durch diese obskuren Operationen Fehler einschleichen.
- Sven Rautenberg