2015-08-20 6 views
1

я наткнулся на эту функцию в JavaScriptЧто происходит при использовании этой последовательности битовых операторов

function(x) { 
    return (x >> 8 << 8)^x; 
}; 

он используется для преобразования х в представлении байта. Я понимаю, что эти битовые операции, тем не менее я не понимаю, что происходит, как и (122 >> 8 < < 8) печатает 0.

ответ

2
x >> 8 

Это право сдвиги х 8 раз, эффективно очищая наименее значимый 8 бит.

(x >> 8) << 8 

Этот левый сдвиг вышеуказанного количества на 8 бит. Таким образом, мы получаем x, причем младшие значащие 8 бит равны 0. Если x (16-разрядное число) было изначально 0b0001000101010101, оно сначала становится 0b0000000000010001 и, наконец, становится 0b0001000100000000.

(x >> 8 << 8)^x 

Это будет XOR вышеуказанного количества с й, оставляя младшие 8 бит нетронутые и очистку всех остальных 0. Таким образом, младший байт получается. Он будет работать и в вашем случае, так как 122 меньше 2^8. Xoring 122 с 0 возвращает наименее значимый байт - 122.

+0

О, это имеет смысл, спасибо! –

Смежные вопросы