document.write( (1 << 31) +"<br/>");
Оператор <<
определяется как работающий с 32-разрядными целыми числами со знаком (преобразуется из собственного хранения чисел с плавающей запятой двойной точности). Так что 1<<31
должно привести к отрицательному числу.
Единственный оператор JavaScript, который работает с 32-разрядными целыми числами без знака, это >>>
. Вы можете использовать это для преобразования целого числа со знаком, над которым вы работали с другими побитовыми операторами, в целое число без знака:
document.write(( (1<<31)>>>0 )+'<br />');
В то же время:
document.write( (1 << 32) +"<br/>");
не будет работать, потому что все операции сдвига используют только самые младшие 5 бит сдвига (в JavaScript и других C-подобных языках тоже). <<32
равно <<0
, т.е. без изменений.