Die Art und Weise, wie negative Zahlen dargestellt werden, wird als Zweierkomplement bezeichnet. Um zu zeigen, wie das funktioniert, nehmen Sie als Beispiel -12. 12, binär, ist 00001100 (angenommen, ganze Zahlen sind 8 Bits, obwohl sie in Wirklichkeit viel größer sind). Nehmen Sie das Zweierkomplement, indem Sie einfach jedes Bit invertieren, und Sie erhalten 11110011. Dann fügen Sie einfach 1 hinzu, um 11110100 zu erhalten. Beachten Sie, dass Sie, wenn Sie dieselben Schritte erneut anwenden, positive 12 zurückbekommen.
Die >>> verschiebt in Null egal was, also 12 >>> 1 sollte dir 00000110 geben, was 6 ist, und (-12) >>> 1 sollte dir 01111010 geben, was 122 ist. Wenn du Versuchen Sie dies tatsächlich in Java, Sie erhalten eine viel größere Zahl, da Java-Ints tatsächlich viel größer als 8 Bits sind.
Der >> verschiebt sich in ein Bit identisch mit dem höchsten Bit, so dass positive Zahlen positiv bleiben und negative Zahlen negativ bleiben. 12 >> 1 ist 00000110 (noch 6) und (-12) >> 1 wäre 11111010, was negativ ist 6.
Mögliche Duplikate: [Unterschied zwischen >>> und >>] (http://stackoverflow.com/q/2811319/1529630), [Javas >> versus >>> Operator?] (http://stackoverflow.com/q/1034640/1529630) – Oriol