[an error occurred while processing this directive]
|
Оно только с виду работает. А вот попробуйте сделать
var
si : SmallInt;
begin
si := -1;
si := si shr 17;
end;
По логике вещей должно оставаться все равно -1. Ан нет - 32767 :). А вычисленное значение сдвига в реальности может оказываться больше количества разрядов. В общем - это выход, но с припрятанными граблями.
Вероятно операции со SmallInt делаются все равно в 32-х битном режиме, что и для первых 16-ти сдвигов дает правильный результат... А дальше вылезают нули.
E-mail: info@telesys.ru