Ответ 1
& является побитовым логическим и оператором - он выполняет операцию с двумя целыми значениями.
WHERE (sc.Attributes & 1) = 0
Вышеприведенный код проверяет, является ли sc.Attributes четным числом. Это то же самое, что сказать, что первый бит не установлен.
Из-за имени столбца, хотя: "Атрибуты", то значение "1", вероятно, просто является некоторым флагом, который имеет какое-то внешнее значение.
Обычно для каждого флага, хранящегося в числе атрибутов, используется 1 двоичная цифра. Таким образом, чтобы проверить первый бит, вы используете sc.Attributes & 1, чтобы проверить второе, вы используете sc.Attributes & 2, чтобы проверить третий, вы используете sc.Attributes & 4, чтобы проверить, что четвертый использует sc. Атрибуты & 8,...
Параметр = 0 проверяет, не установлен ли первый бит.
Некоторые двоичные примеры: (==, чтобы показать результат операции)
//Check if the first bit is set, same as sc.Attributes&1
11111111 & 00000001 == 1
11111110 & 00000001 == 0
00000001 & 00000001 == 1
//Check if the third bit is set, same as sc.Attributes&4
11111111 & 00000100 == 1
11111011 & 00000100 == 0
00000100 & 00000100 == 1