&
- побитовый оператор AND в C ++
Битовый оператор AND (&) сравнивает каждый бит первого операнда с соответствующим битомвторого операнда.Если оба бита равны 1, соответствующий бит результата устанавливается на 1. В противном случае соответствующий бит результата устанавливается на 0.
11111111 11110000
& 00000000 01100011
_________________
00000000 01100000
<<
- побитовый оператор сдвига влевов C ++
Оператор << сдвигает свой первый операнд влево на число битов, заданных его вторым операндом, заполняя новые 0 битов справа. </p>
0 1 0 1 0 1 1 0 << 2
_____________________
0 1 0 1 0 1 1 0 0 0
^
- это оператор Ex-Or в C ++
Оператор побитового исключения-ИЛИ сравнивает каждый бит своего первого операнда с соответствующим битом еговторой операндЕсли один бит равен 0, а другой бит равен 1, соответствующий бит результата устанавливается на 1. В противном случае соответствующий бит результата устанавливается на 0.
0 1 0 1 0 1 1 0
^ 0 0 1 1 0 0 1 0
___________________
0 1 1 0 0 1 0 0
Итак, & 0x7fffffff
устанавливает бит 3132-разрядное целое число обнуляется и оставляет другие биты со значениями, которые у них были.
(n << 13) ^ n
n
смещено влево на 13
, а результат XORed с n
.