16-битное значение становится отрицательным при сдвиге битов в JavaScript - PullRequest
0 голосов
/ 30 июня 2018

Я вижу странное поведение при попытке сдвинуть 16-битное значение в битах

0xF << 4 == 0xF0 // true

0xFF << 8 == 0xFF00 // true

0xFFF << 12 == 0xFFF000 // true

0xFFFF << 16 == 0xFFFF0000 // false

Причина, по которой последнее верно, состоит в том, что 0xFFFF << 16 фактически дает значение -65536. Почему это происходит, когда 0xFFFF0000 является допустимым числом в JavaScript

1 Ответ

0 голосов
/ 30 июня 2018

Поскольку Javascript использует 32-разрядные целые числа со знаком числа для побитовых операций.

Это означает, что числа могут быть отрицательными.

Чтобы получить желаемый результат, вы должны убрать знак с >>> 0.

(0xFFFF << 16) >>> 0 == 0xFFFF0000
...