>>>
ist der vorzeichenlose Rechtsverschiebung-Operator in Java (ref). Da mid
, low
und high
vorzeichenbehaftete Ganzzahlen sind, kann die Addition von low
und high
zu einem negativen Wert überlaufen. >>>
ignoriert die mögliche negative Auswirkung dieses Ergebnisses und verschiebt es nach rechts, als ob es eine vorzeichenlose Zahl wäre (und in Java gibt es keine vorzeichenlosen Zahlen).
In C und C++, dann ist dies das Äquivalent von
mid = ((unsigned int)low + (unsigned int)high)) >> 1;
(die explizit in dem Artikel erwähnt wird Ihnen verlinken auf).
Dieser endet als die gleiche wie
mid = ((unsigned int)low + (unsigned int)high))/2;
Beachten Sie, dass Sie wahrscheinlich nicht wollen, es so zu tun. Wenn Sie vorzeichenlose Werte verwenden, sollten Sie bei unsignierten Werten bleiben und vermeiden, zwischen signierten und unsignierten Daten hin- und herzuspringen.
Es gibt nicht so etwas wie eine „logische Rechtsverschiebung“ in C (es gibt keine '' >>> Operator) . –
>>> ist ein Java-Operator – UmNyobe
Danke Jungs, das hat geholfen. Ich habe dort den entsprechenden C-Code gesehen, aber meine Fragen hatten mehr damit zu tun, warum das funktionieren würde. Aber all deine Antworten halfen mir, meine Zweifel auszuräumen. – Bugaboo