Pourquoi l'expression (-1 >>> 32)
dans Java est évaluée à -1
au lieu de 0
comme prévu? Le >>>
-shift-opérateur doit remplir 0s précède, le résultat devrait avoir tous les bits à 0.(-1 >>> 32) == -1?
C'est bizarre, car il casse la sémantique de >>>
: par exemple (-1 >>> x)
a les x premiers bits mis à 0 pour tous 0 <= x <= 31
. La seule exception (inattendue) est 32.
Est-ce un comportement intentionnel, un bogue ou une optimisation du compilateur (surmotivée)?
J'ai utilisé l'expression ~(-1 >>> x)
pour étendre un masque de réseau cidr à son équivalent de 32 bits, mais il semble que les masques/32 doivent être traités séparément.
thx pour votre réponse et désolé de poster des questions en double. cela l'explique bien. – paranoid