Любой bitwise operator на Number
в JavaScript преобразует его операнд к 32-битовому биллианскому номеру.
Это означает, что если число больше, чем то, что может быть сохранено на 32 бита, оно будет усечено. Big-endian означает, что число хранится в естественным порядком при чтении слева направо, то есть более важные номера сохраняются первыми, поэтому, если число хранится за один байт, более важным является его первый байт.
Это означает, что двоичное представление -1
«ы будет ...
11111111 11111111 11111111 11111111
(Это в two's complement-1
. Это выполняется путем вычисления значения этого числа в двоичной системе, а затем листать каждый бит, и добавление одного .)
Когда вы смените на 100
, вы найдете его only shifts by 4
, оставив вас с ...не
00001111 11111111 11111111 11111111
Как вы можете видеть, старший бит больше не устанавливается, так что это не является отрицательным, и это на самом деле 268435455
(число от вашего вопроса).
и средняя реализация, похоже, делает X >>> (Y% 32). Следовательно, в примере -1 >>> (100% 32) => -1 >>> 4 = 268435455 –
Побитовые операторы в JavaScript всегда обрабатывают свой операнд как 32-битное целое число со знаком. – alex
^^^ более точно 32-битное знаковое целое число, и поэтому -1 заканчивается как все. – adeneo