Побитовая операция 32-битного неподписанного JavaScript - одна короткая

Почему

((255<<24)|(255<<16)|(255<<8)|255)>>>0

равно 4294967295, когда

Math.pow(256,4)

равно 4294967296?

Обратите внимание, что побитовая операция одна короткая. Почему это?!

Ответ 1

Потому что нуль берет двоичное значение.

4294967296 - количество "слотов", которое дает 32 бита, 4294967295 - это десятичное число, занимающее самый высокий слот.

Ответ 2

Поскольку первый из них равен 2 ^ 32-1, а второй - 2 ^ 32? Вы знаете, что с первым "утверждением" вы устанавливаете 1 первые 32 бита значения, правильно?

В 32 бит первый бит "оценивается" 1, второй 2, третий 4... 32-й 2147483648. Их сумма составляет 4294967295: -)

Сделайте пример с 8 битами.

Math.pow(256,1) == 256

1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 = 255.