Я вижу странное поведение при попытке сдвинуть 16-битное значение в битах
0xF << 4 == 0xF0 // true
0xFF << 8 == 0xFF00 // true
0xFFF << 12 == 0xFFF000 // true
0xFFFF << 16 == 0xFFFF0000 // false
Причина, по которой последнее верно, состоит в том, что 0xFFFF << 16
фактически дает значение -65536
. Почему это происходит, когда 0xFFFF0000
является допустимым числом в JavaScript