Qu’affiche le programme suivant ?
System.out.println(-2 >>> 1);
A. 1
B. -1
C. 2147483647 (Integer.MAX_VALUE)
D. -2147483648 (Integer.MIN_VALUE)
Solution
Attention à ne pas tomber dans le piège, ici on utilise un décalage logique (et non arithmétique) qui ne fait qu’insérer des bits nuls à gauche. Voilà la représentation de -2 en binaire :
-2 = 0b11111111111111111111111111111110 ( = -2^31 + 2^30 + 2^29 + ... + 2^1)
En décalant vers la droite de 1, et en insérant un bit nul à gauche :
-2 >>> 1 = 0b01111111111111111111111111111111
On obtient la plus grande valeur représentable par un int qui est 2147483647 ( = 2^30 + 2^29 + 2^28 + ... + 2^0).
La réponse correcte est donc la réponse C