Относительно первой половины:
>>
- битовый сдвиг вправо.
Таким образом, сдвиг числового значения на 3 бита вправо аналогичен делению на 8и int
получение результата.
Вот хороший справочник по операторам и их приоритетам: http://web.cs.mun.ca/~michael/c/op.html
Вторая часть вашего вопроса касается оператора &
, который немногоиПримером является ANDing i
и число, которое оставляет все установленные биты, кроме 3 младших значащих.По сути, это то же самое, что происходит, когда у вас есть число, разделите его на 8, сохраните результат как целое число, а затем умножьте этот результат на 8.
Причина в том, что деление на 8 и сохранениецелое число - это то же самое, что и смещение бит в три позиции вправо, а умножение на 8 и сохранение результата в целое число аналогично смещению бит в 3 места влево.
Итак, если выумножаете или делите на степень 2, например, на 8, и вы согласитесь с усечением битов, которое происходит, когда вы сохраняете результат, в результате которого int
, сдвиг битов происходит быстрее, оперативнее.Это потому, что процессор может пропустить алгоритм умножения / деления и просто перейти к сдвигу битов, который включает в себя несколько шагов.