Andrei wrote:
в integer 32 бита?
Так точно, включая знак.
тогда, почему единица сдвинутая на 31 влево не валидный integer?
Еще раз повторю - результатом сдвига является 64-битное знаковое число. Единица, сдвинутая на 31 разряд влево, в 64-битном представлении равна +2147483648. Это значение бинарно влазит в integer, но при проверке в 64-битной арифметике оказывается за пределами допустимого диапазона (от -2147483648 до +2147483647). Ибо сервер допустимый диапазон проверяет арифметически, в рамках исходного типа данных, а не битовой маской, в рамках типа данных результата.
-- Дмитрий Еманов

