Droit déplaçant les nombres négatifs en C

J'ai un code C dans que je ne le suit.

int nPosVal = +0xFFFF;   //+ Added for ease of understanding
int nNegVal = -0xFFFF;   //- Added for valid reason

Maintenant, quand j'essaie

printf ("%d %d", nPosVal >> 1, nNegVal >> 1);

- Je obtenir

32767 -32768

Est-ce prévu?

Je suis capable de penser quelque chose comme

65535 >> 1 = (int) 32767.5 = 32767
-65535 >> 1 = (int) -32767.5 = -32768

Qui est, -32767.5 est arrondi à l'-32768.

Est cette compréhension correcte?

  • Droit de décalage de bits fonctionne comme "parqueté de la division". Il arrondit toujours vers l'infini négatif. Dans la syntaxe de Python: -5 // 4 = -2.
InformationsquelleAutor Alphaneo | 2009-12-07