5
mam kod działa, że czasami daje to:C#: przesunięcie w lewo przypisanie zachowanie operatora
UInt32 current;
int left, right;
...
//sometimes left == right and no shift occurs
current <<= (32 + left - right);
//this works
current <<= (32 - right);
current <<= left;
Wydaje się, dla każdej wartości> = 32% tylko wartość 32 jest przesunięty. Czy w strukturze występuje "optymalizacja"?
Problem jest niejasny. 'UInt32' ma 32 bity wartości. Jeśli przesuniesz go w lewo o 32 bity, otrzymasz wszystkie bity od zera (ponieważ przesunąłeś wszystkie bity wartości "z dala"). Jeśli przejdziesz dalej, nadal otrzymasz wszystkie bity zero, więc efekt jest dokładnie taki sam. Czego oczekiwałeś? –
To nie jest optymalizacja; tak właśnie zdefiniowano działanie operatora. – Gabe