5
Ben kodu koşuyorum bazen bu verir:C#: Shift sol atama operatörü davranış
UInt32 current;
int left, right;
...
//sometimes left == right and no shift occurs
current <<= (32 + left - right);
//this works
current <<= (32 - right);
current <<= left;
Herhangi değeri> = 32, 32 kaydırılır tek değer% görünür. Çerçevede meydana gelen bazı "optimizasyon" var mı?
Sorun açık değil. 'UInt32' 32 değer bite sahiptir. 32 bitten sola kaydırırsanız, tüm bitleri sıfırlarsınız (çünkü tüm değer bitlerini "uzaklaştırdınız"). Eğer daha fazla değiştirirseniz, yine de tüm bitleri sıfırlarsınız, böylece efekt tam olarak aynıdır. Ne bekliyordun? –
Bu bir optimizasyon değil; Bu, operatörün nasıl çalışması için tanımlandığıdır. – Gabe