Andrei wrote:

в integer 32 бита?

Так точно, включая знак.

тогда, почему единица сдвинутая на 31 влево не валидный integer?

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


--
Дмитрий Еманов

Ответить