Сдвиг вправо отрицательных чисел в C
У меня есть код C, в котором я делаю следующее.
int nPosVal = +0xFFFF; // + Added for ease of understanding
int nNegVal = -0xFFFF; // - Added for valid reason
Теперь, когда я пытаюсь
printf ("%d %d", nPosVal >> 1, nNegVal >> 1);
я получил
32767 -32768
Это ожидается?
Я могу думать что-то вроде
65535 >> 1 = (int) 32767.5 = 32767
-65535 >> 1 = (int) -32767.5 = -32768
То есть -32767,5 округляется до -32768.
Это понимание правильно?