IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> Осторожно, баг!, некорректность битового сдвига в Дельфи 7
TarasBer
сообщение 19.01.2011 15:57
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Обнаружил такой прикол.
Турбо Паскаль вообще не знает про существование знакового сдвига (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 - 19.01.2011 15:58


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 13:44
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"