Considere el siguiente código:¿Qué dice el estándar C sobre el cambio de bits más bits que el ancho de tipo?
int i = 3 << 65;
yo esperaría que el resultado es i==0
, sin embargo, el resultado real es i==6
. Con algunas pruebas he encontrado que con el siguiente código:
int i, s;
int a = i << s;
int b = i << (s & 31);
los valores de a
y b
son siempre los mismos.
¿El estándar C dice algo sobre el desplazamiento de más de 32 bits (el ancho del tipo int
) o es este comportamiento no especificado?
"Suficientemente bueno para mí": lo suficientemente bueno para todos, ya que el estándar contiene exactamente el mismo idioma. :-) Tenga en cuenta que también puede obtener C99 + TC3 gratis en http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf y también tiene el mismo idioma, por lo que incluso si usted no tiene el estándar en sí mismo, puede estar bastante seguro de lo que dice. –
También puede obtener una versión html mucho más fácil de leer aquí: http://port70.net/~nsz/c/c99/n1256.html –
@R .., oh, gracias, eso será mucho más fácil leer que el PDF. :) – sarnold