что означает |= (один канал равен) и &=(один амперсанд равен)
в строках ниже:
//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