Судоку Алгоритм проверки достоверности - как работает этот код?

Я читал вопрос, размещенный здесь: Алгоритм судоку на C #

И одним из опубликованных решений был этот фрагмент кода.

public static bool IsValid(int[] values) {
        int flag = 0;
        foreach (int value in values) {
                if (value != 0) {
                        int bit = 1 << value;
                        if ((flag & bit) != 0) return false;
                        flag |= bit;
                }
        }
        return true;
}

Идея состоит в том, что он обнаружит дубликаты в массив значений; но я поражен тем, как много я не знаю. Может кто-нибудь объяснить мне это?

РЕДАКТИРОВАТЬ: Спасибо всем. Так много отличных ответов, я не знаю, как выбрать один. Теперь это имеет смысл.

19
задан Community 23 May 2017 в 10:27
поделиться