Это оптимизация, конструкция "x shr 31" при отрицательном X будет принимать 1, в противном случае 0.
Можно написать что-то типа
Код:
if (x < 0) then
Dec(x, blockSize);
xbn := (x div blockSize) + 20;
...
Смысл без картинки сложно объяснить, в общем когда преобразуешь координаты к номеру блока, то номера блоков "+0" и "-0" должны отличаться.