Недавно я нашел этот фрагмент кода JavaScript:
Math.random() * 0x1000000 << 0
Я понял, что первая часть просто генерирует случайное число между 0 и 0x1000000 (== 16777216).
Но вторая часть показалась странной. Какой смысл выполнять бит-сдвиг на 0? Я не думал, что все будет. Однако при дальнейшем исследовании я заметил, что сдвиг на 0, казалось, усекал десятичную часть числа. Кроме того, это не имело значения, было ли это сдвиг вправо, или сдвиг влево, или даже беззнаковый сдвиг вправо.
> 10.12345 << 0
10
> 10.12345 >> 0
10
> 10.12345 >>> 0
10
Я тестировал как с Firefox, так и с Chrome, и все одинаково. Итак, в чем причина этого наблюдения? И это просто нюанс JavaScript, или это происходит на других языках? Я думал, что понял бит-сдвиг, но это меня озадачило.