>>
- это операция правого сдвига .
Если у вас число 8, представленное в двоичном виде как 00001000, смещение битов вправо на 3 позиции даст вам 00000001, что является десятичным 1. Это эквивалентно делению на 2 три раза.
Деление и умножение на одно и то же число означает, что вы устанавливаете некоторые биты с точностью до нуля. То же самое можно сделать, если вы примените маску. Скажем, 0xF8 - это бит 11111000, и если вы И это число, то последние три бита будут установлены в ноль, а остальные биты останутся такими, как есть. Например, 10 & 0xF8 будет 00001010 и 11111000, что равно 00001000, или 8 в десятичном виде.
Конечно, если вы используете 32-битные переменные, у вас должна быть маска, соответствующая этому размеру, поэтому в ней будут установлены все биты, равные 1, за исключением трех бит справа, что даст вам ваш номер - 0xFFffFFf8.