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


116

아래 줄에서 :

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

답변:


149

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

x |= y;

으로

x = x | y;

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

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

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

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

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

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

2
x = x | (y);때문에 그것을 설명하는 더 나은 방법 x |= y + z;으로 동일하지 않습니다x = x | y + z;
IronMensan

답변 감사합니다 /하지만 내 목적 (시스템 속성 제거)을 위해 어떤 것을 사용해야합니까 (| = 또는 & =)?
SilverLight

1
@LostLord :Folder.Attributes &= ~FileAttributes.System;
George Duckett

33

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

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

Folder.Attributes &= ~FileAttributes.System;

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


1
a한 번만 평가 된다는 것은 무엇을 의미 합니까? 왜 그보다 더 많이 평가됩니까?
silkfire

@silkfire이이 단락 평가라고 볼 en.wikipedia.org/wiki/Short-circuit_evaluation
Polluks

@Polluks 그래서 기본적으로 a |= b실제로 의미 a = a || b합니까?
silkfire

@silkfire 네, 하나의 파이프와 두 개의 파이프를 교환하지 마십시오.
Polluks

3

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

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

Folder.Attributes ^= FileAttributes.System;

1
나는 당신이 이것을 위해 AND 대신 XOR을 사용하고 싶다고 생각합니다.
GameZelda

약간은 / ~ 필요 여부를 혼동
실버 라이트

@LostLord 내가 아는 한 두 가지 방법은 유사합니다
Chris S

@ChrisS ^= bit는 비트가 아직 설정 &= ~bit되지 않은 경우 설정하고 설정하지 않습니다.
크로니클

당신은 확실히 xor를 사용하고 싶지 않습니다. 그것이 사라지면 다시 되돌릴 것입니다.
John Lord
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.