Свойство userAccountControl
содержит двухбайтовое значение, в котором каждый отдельный бит имеет значимое значение. Если бит включен, то используется какая-либо опция - если она не включена, то опция отсутствует.
Это более компактно и более оптимизировано для пространства, чем наличие миллиарда логических значений. Кроме того, многие «старые» Win16 и Win32 API просто работают таким образом.
Битовый оператор «И» используется для проверки наличия такого единственного бита:
if (newUser.Properties ["userAccountControl"]. Значение & 0x400 == 0x400)
в этом случае устанавливается бит 0x400.
Чтобы на самом деле установить бит, вы используете побитовый оператор «ИЛИ»:
newUser.Properties ["userAccountControl"]. Value = val | 0x800
Устанавливает бит "0x800".
Это базовая логическая логическая логика, правда. Действительно, немного грязно - но .NET имеет некоторую помощь, чтобы немного упростить ситуацию (например, проверьте тип данных BitArray )