Si consideri il seguente codice:Che cosa dice lo standard C sul bit-shifting di più bit rispetto alla larghezza del tipo?
int i = 3 << 65;
mi aspetterei che il risultato è i==0
, tuttavia il risultato effettivo è i==6
. Con alcuni test ho scoperto che con il seguente codice:
int i, s;
int a = i << s;
int b = i << (s & 31);
i valori di a
e b
sono sempre gli stessi.
Lo standard C dice qualcosa sullo spostamento di oltre 32 bit (la larghezza del tipo int
) o è un comportamento non specificato?
"Good Enough For Me" - abbastanza buono per tutti, poiché lo standard contiene esattamente la stessa lingua. :-) Nota che puoi anche ottenere C99 + TC3 gratuitamente su http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf e anch'esso ha la stessa lingua, quindi anche se non hai lo stesso standard puoi essere abbastanza sicuro di quello che dice! –
Puoi anche ottenere una versione html molto più facile da leggere qui: http://port70.net/~nsz/c/c99/n1256.html –
@R .., oh, grazie, sarà molto più facile leggere rispetto al PDF. :) – sarnold