что означает |= (один канал равен) и &=(один амперсанд равен)
в строках ниже:
//Folder.Attributes = FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly;
Folder.Attributes |= FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly;
Folder.Attributes |= ~FileAttributes.System;
Folder.Attributes &= ~FileAttributes.System;
что значит |= (одна труба равна) и &= (один знак равенства) означает в C#
Я хочу удалить системный атрибут с сохранением других...
3 ответа:
они составное задание операторы, переводящие (очень слабо)
x |= y;на
x = x | y;и то же самое для
&. В нескольких случаях есть немного больше деталей относительно неявного приведения, и целевая переменная оценивается только один раз, но это в основном суть.С точки зрения не-составные операторы,
&является побитовым "и" и|- это побитовое "Или".EDIT: в этом случае вы хотите
Folder.Attributes &= ~FileAttributes.System. Чтобы понять, почему:
~FileAttributes.Systemозначает "все атрибуты за исключениемSystem" (~побитово-нет)&означает "результатом являются все атрибуты, которые встречаются с обеих сторон операнда"так это в основном действует как маска - только сохранить те атрибуты, которые появляются в ("все, кроме системы"). В генерал:
|=только добавить биты до цели&=только удалить биты от цели
|и побитовое или&и побитовое и
a |= bэквивалентноa = a | bкроме этогоaвычисляется только один разa &= bэквивалентноa = a & bкроме этогоaвычисляется только один разчтобы удалить системный бит без изменения других битов, используйте
Folder.Attributes &= ~FileAttributes.System;
~- это побитовое отрицание. Таким образом, вы установите все биты в 1 кроме системного бита.and- ing с маской установит систему в 0 и оставит все остальные биты неповрежденными, потому что0 & x = 0и1 & x = xлюбойx