@ivan386

Сдвиг вправо на (32, 64, 128, 256...) даёт тоже положительное число что и было. Почему это происходит?

Наткнулся на такой баг или нет?

Сдвиг вправо на (32, 64, 128, 256...) даёт тоже положительное число что и было хотя должен быть 0 на сколько я понимаю.
1 >> 32 // = 1
1 >> 64 // = 1
1 >> 128 // = 1
2 >> 32 // = 2
1 >> 128 // = 1
2 >> 32 // = 2
2 >> 64 // = 2


Тут уже всё в порядке
1 >> 31 // = 0
1 >> 63 // = 0
1 >> 127 // = 0
2 >> 31 // = 0
2 >> 63 // = 0

Как и почему это происходит?
  • Вопрос задан
  • 155 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Открываем спецификацию, смотрим как выполняется сдвиг. Особое внимание на пункт седьмой:

Let shiftCount be the result of masking out all but the least significant 5 bits of rnum, that is, compute rnum & 0x1F.

К размеру сдвига применяется битовая маска, обнуляющая все двоичные разряды, кроме младших пяти. Т.е., сдвиг на 32, 64, 128 и т.д. - это сдвиг на 0.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы