5
estoy ejecutando código que a veces produce esto:C#: Shift comportamiento operador de asignación izquierda
UInt32 current;
int left, right;
...
//sometimes left == right and no shift occurs
current <<= (32 + left - right);
//this works
current <<= (32 - right);
current <<= left;
Aparece por cualquier valor> = 32, sólo el 32% se desplaza valor. ¿Hay alguna "optimización" ocurriendo en el marco?
El problema no está claro. 'UInt32' tiene 32 bits de valor. Si lo desplaza a la izquierda en 32 bits, obtendrá todos los bits cero (porque ha desplazado todos los bits de valor "de distancia"). Si cambia por más, igual obtendrá todos los bits, por lo que el efecto es exactamente el mismo. ¿Que esperabas? –
No es una optimización; así es como el operador está definido para trabajar. – Gabe