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


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 = 0및 1 & 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.