Ich arbeite an einer Hausaufgabe, wo wir eine Funktion namens isGreater (x, y) machen sollen, die zurückgibt, wenn x größer als y ist, aber wir können nur bitweise Operatoren zusammen mit + und! Ich habe das Problem bereits gelöst, indem ich die Regel verwende, wenn x und y unterschiedliche Vorzeichen haben, dann x> = 0 und y < 0 oder wenn x und y das gleiche Vorzeichen haben, dann nur dann, wenn y-x negativ ist.Warum funktioniert diese Größer-als-Funktion?
Als ich jedoch sah, wie andere Leute es lösten, bemerkte ich die folgende Methode, die aus irgendeinem Grund richtig funktioniert.
y = ~y;
return !(((x&y) + ((x^y) >> 1)) >> 31);
Ich kann nicht für das Leben von mir verstehen, warum das funktioniert, ich meine, das hat etwas mit dem ersten Bit in x zu tun, die nicht in y oder etwas gesetzt?
Hinweis: Scheinbar ist dies nur eine gültige Lösung, wenn x und y int sind, nicht vorzeichenlos int.
Das ist erlaubt, zusammen mit der! Operator. Die Lösung ist absolut gültig. – jamiees2
Es tut mir leid, ich habe einen Fehler gemacht, indem ich die + und! Betreiber. – jamiees2
Wenn ich mich nicht irre, wenn x 1 ist und y 1 ist, dann gibt das 1 zurück. Also soll die Funktion 'isGreaterOrEqual (x, y)' sein? – indiv