Оператор >>
выполняет сдвиг бит .
Выражение >> 1
почти * то же самое, что и / 2
, поэтому программист вычислял индекс colorList.Count / 2
, который является ** медианой . Чтобы понять, почему это так, вам нужно взглянуть на двоичное представление участвующих чисел. Например, если в вашем списке 25 элементов:
n : 0 0 0 1 1 0 0 1 = 25
\ \ \ \ \ \ \
n >> 1: 0 0 0 0 1 1 0 0 = 12
В общем, использование побитового оператора, когда вы действительно хотите выполнить деление, является плохой практикой. Вероятно, это преждевременная оптимизация, потому что программист думал, что будет быстрее выполнять побитовую операцию вместо деления. Было бы гораздо понятнее написать разделение, и я не удивлюсь, если производительность двух подходов будет сопоставимой.
* Выражение x >> 1
дает тот же результат, что и x / 2
для всех натуральных и отрицательных целых чисел. Однако это дает другой результат для отрицательных нечетных целых чисел. Например -101 >> 1 == -51
, тогда как -101 / 2 == -50
.
** На самом деле медиана определяется таким образом, только если в списке нечетное количество элементов. Для четного числа элементов этот метод, строго говоря, не даст медианы.