Согласно документации операторы сдвига битов MySQL генерируют 64-битное целое число без знака без знака .Поэтому, если вы хотите получить ожидаемое поведение с отрицательными числами, вы можете добавить свою собственную логику:
WITH yourTable AS (
SELECT 4 AS val UNION ALL
SELECT -4
)
SELECT
IF(val > 0, val >> 2, -1.0*((-1.0*val) >> 2)) AS result
FROM yourTable;
Это выводит:
1
-1.0