[c#] | = (단일 파이프 같음) 및 & = (단일 앰퍼샌드 같음)의 의미

아래 줄에서 :

//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 #
내가 다른 사람을 유지하여 시스템 속성을 제거 할을 …



답변

그들은 복합 할당 연산자, 번역 (매우 느슨하게)

x |= y;

으로

x = x | y;

&. 암시 적 캐스트와 관련하여 몇 가지 경우에 좀 더 자세한 내용이 있으며 대상 변수는 한 번만 평가되지만 기본적으로 그 요점입니다.

비 복합 연산자 측면에서는 &비트 “AND” 이고 |비트 “OR” 입니다.

편집 :이 경우 원하는 Folder.Attributes &= ~FileAttributes.System. 이유를 이해하려면 :

  • ~FileAttributes.System“를 제외한 모든 속성을 의미합니다 System( ~는 비트 NOT).
  • & “결과는 피연산자의 양쪽에서 발생하는 모든 속성”을 의미합니다.

따라서 기본적으로 마스크 역할을합니다 . ( “시스템을 제외한 모든 것”)에 나타나는 속성 유지합니다. 일반적으로 :

  • |=대상 비트 만 추가 합니다.
  • &=대상에서 비트 만 제거 합니다.

답변

a |= b한 번만 평가 a = a | b된다는 점 을 제외하고 는 동일 합니다. 한 번만 평가 된다는 점 을 제외하면 동일합니다.a
a &= ba = a & ba

다른 비트를 변경하지 않고 시스템 비트를 제거하려면

Folder.Attributes &= ~FileAttributes.System;

~비트 부정입니다. 따라서 시스템 비트를 제외한 모든 비트를 1로 설정합니다. and마스크를 입력 -ing은 0으로 시스템을 설정하고 다른 모든 비트를 떠나 손상으로 인해 0 & x = 01 & x = x어떤을위한x


답변

나머지는 유지하면서 시스템 속성을 제거하고 싶습니다.

다음과 같이 할 수 있습니다.

Folder.Attributes ^= FileAttributes.System;


답변