Если у вас нет 2 ^ x границ, тип может использовать следующий трюк:
, если x >= 0
и x < N
, вы можете проверить оба:
if Longword( x ) < Longword( N ) then ...
Это работаетиз-за того, что отрицательные числа в знаковых числах соответствуют наибольшим числам в типах данных без знака.
Вы можете расширить это (когда проверка диапазона отключена) до:
if Longword( x - A ) < Longword ( ( B - A ) ) then ...
Теперь у вас естьоба теста (диапазон [ A, B >
) в SUB и CMP плюс один Jcc, предполагая, что (B - A) предварительно рассчитан.
Я использую этот вид оптимизации только тогда, когда действительно необходим;например, они, как правило, делают ваш код менее читаемым, и он сокращает лишь несколько тактов на тест.
Примечание для читателей языка, подобных C: Longword - это 32-битный тип данных Delphi без знака.