5
Я бегу код, который иногда приводит к следующим образом:C#: Сдвиг влево присваивание поведение оператора
UInt32 current;
int left, right;
...
//sometimes left == right and no shift occurs
current <<= (32 + left - right);
//this works
current <<= (32 - right);
current <<= left;
Оказывается для любого значения> = 32, только значение% 32 сдвинута. Существует ли какая-то «оптимизация» в рамках?
Проблема неясна. 'UInt32' имеет 32 бита значения. Если вы сдвинете его налево на 32 бита, вы получите все биты нуль (потому что вы сдвинули все биты значений «прочь»). Если вы переместитесь больше, вы все равно получите все биты нуль, так что эффект будет точно таким же. Чего ты ожидал? –
Это не оптимизация; это то, как оператор определен для работы. – Gabe