Wie kann die XOR-Operation (auf zwei 32-Bit-Ints) nur mit arithmetischen Grundoperationen implementiert werden? Musst du es bitweise machen, nachdem du jede Potenz von 2 geteilt hast, oder gibt es eine Abkürzung? Die Ausführungsgeschwindigkeit ist mir weniger wichtig als der einfachste und kürzeste Code.Wie implementieren Sie XOR mit + - * /?
Edit: Dies ist keine Hausaufgaben, aber ein Rätsel stellte auf einem hacker.org. Der Punkt ist, XOR auf einer stack-basierten virtuellen Maschine mit sehr begrenzten Operationen zu implementieren (ähnlich der brainfuck Sprache und ja - keine Verschiebung oder Mod). Die Verwendung dieser VM ist der schwierige Teil, der natürlich durch einen Algorithmus, der kurz und einfach ist, vereinfacht wird.
Während die Lösung von FryGuy clever ist, muss ich mit meinem ursprünglichen Ideal (ähnlich der Lösung von litb) gehen, da Vergleiche in dieser Umgebung schwierig zu verwenden sind.
stört Sie Verschiebung und der Modulo-Operator auch? – kenny
x << a === x * (1 << a) x >> a === x/(1 << a) – FryGuy
Klingt nach einem Hausaufgabenproblem. Ich habe es immer als eine gute Methode angesehen, irgendwelche externen Referenzen zu zitieren, aber es wäre ziemlich schamlos, Ihre eigene Frage zu Stackoverflow zu zitieren. Was für ein ethisches Dilemma. –