5
Tôi đang chạy mã mà đôi khi mang lại điều này:C#: Shift nhượng trái điều hành hành vi
UInt32 current;
int left, right;
...
//sometimes left == right and no shift occurs
current <<= (32 + left - right);
//this works
current <<= (32 - right);
current <<= left;
Có vẻ đối với bất kỳ giá trị> = 32, chỉ có giá trị% 32 được thay đổi. Có một số "tối ưu hóa" xảy ra trong khuôn khổ?
Vấn đề không rõ ràng. 'UInt32' có 32 bit giá trị. Nếu bạn chuyển nó sang trái 32 bit, bạn sẽ nhận được tất cả các bit bằng không (vì bạn đã chuyển tất cả các bit giá trị "đi"). Nếu bạn thay đổi nhiều hơn, bạn sẽ vẫn nhận được tất cả các bit bằng không, do đó, hiệu ứng là chính xác như nhau. Những gì bạn đã mong đợi? –
Nó không phải là một tối ưu hóa; đó chỉ là cách người vận hành được định nghĩa để làm việc. – Gabe