Турбо Паскаль вообще не знает про существование знакового сдвига (sar), даже для знаковых переменных. Но он про него не знал и в отладчике и при вычислении констант, всё было относительно честно.
В Дельфи 7, однако же, всё намного хитрее.
Итак, пишем такую программу:
var
i: integer;
begin
i := -7;
i := i shr 1;
i := (-7) shr 1;
end.
Открываем отладчик и загоняем в него выражения:
Код
(-7) shr 1
i
i shr 1
Оптимизацию отрубаем, чтобы строчки не сожрались.
Насчёт остальных опций - вроде все комбинации дают один результат.
После выполнения 1й строки (i := -7) в отладчике видим, что (-7) shr 1 равно -4, и i shr 1 тоже равно -4.
После выполнения 2й строки (i := i shr 1) в отладчике видим, что i стало равно... 2147483644!!!
После выполнения 3й строки (i := (-7) shr 1) i становится равно -4.
То есть при вычислении констант, а также при вычислении выражений в отладчике Дельфи таки вспоминает про знаковый сдвиг sar (который при сдвиге вправо копирует старший бит, очень удобная команда для эмуляции деления на степени двойки по правилам математики).
Но при компиляции этой команды в код Дельфи забывает про знак переменной!
Баг из Д7, как в других версиях - не знаю.
Сообщение отредактировано: TarasBer -