Estaba trabajando con operadores de cambio de bit (vea mi pregunta Bit Array Equality) y un usuario de SO señaló un error en mi cálculo de mi operando de cambio - estaba calculando un rango de [1,32] en lugar de [0,31] por un int. (! ¡Viva la comunidad SO)C# bit shift: ¿este comportamiento está en la especificación, es un error o es fortuito?
Al fijar el problema, que se sorprendió al encontrar el siguiente comportamiento:
-1 << 32 == -1
De hecho, parecería que n << s
es compilado (o interpretado por el CLR- -no revisé el IL) como n << s % bs(n)
donde bs (n) = tamaño, en bits, de n.
lo que habría esperado:
-1 << 32 == 0
parecería que el compilador se está dando cuenta de que está cambiando más allá del tamaño del objetivo y corregir su error.
Esto es puramente una cuestión académica, pero ¿alguien sabe si esto está definido en la especificación (no pude encontrar nada en 7.8 Shift operators), solo un hecho fortuito de comportamiento indefinido, o hay un caso en que esto podría producir un ¿error?
Ah, por supuesto. Lo leí, pero mi mente debe haber quedado en blanco. Tiene mucho sentido. ¡Gracias! –