Ho codice C in cui eseguire le seguenti operazioni.Numeri negativi con spostamento a destra in C
int nPosVal = +0xFFFF; // + Added for ease of understanding
int nNegVal = -0xFFFF; // - Added for valid reason
Ora in cui provo
printf ("%d %d", nPosVal >> 1, nNegVal >> 1);
ottengo
32767 -32768
È questo prevede?
io sono in grado di pensare una cosa del genere
65535 >> 1 = (int) 32767.5 = 32767
-65535 >> 1 = (int) -32767.5 = -32768
Cioè, -32767,5 arrotondato a -32768.
Questa comprensione è corretta?
+1, questo è quello che volevo sapere. Il giusto turno arrotonda all'infinito negativo. Ma è documentato? – Alphaneo
Dipende dall'implementazione. (Vedi la mia modifica sopra.) Come ho già detto, non ho mai visto un'implementazione diversa su questo, ma teoricamente potrebbe. – Boojum