Números negativos que cambian a la derecha en C

Tengo el código C en el que hago lo siguiente.

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

Ahora cuando lo intento

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

yo obtengo

32767 -32768

¿Se espera esto?

Soy capaz de pensar algo como

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

Es decir, -32767.5 se redondea a -32768.

¿Es correcto este entendimiento?

Respuestas a la pregunta(6)

Su respuesta a la pregunta