什么是| =(单管道相等)和& =(单个和号等于)的意思

时间:2011-08-04 13:40:12

标签: c# operators bitwise-operators

以下行:

//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 个答案:

答案 0 :(得分:122)

他们是compound assignment运营商,翻译(非常松散)

x |= y;

x = x | y;

&相同。在一些关于隐式演员的案例中有更多的细节,目标变量只评估一次,但这基本上是它的要点。

就非复合运算符而言,& is a bitwise "AND"| is a bitwise "OR"

编辑:在这种情况下,您需要Folder.Attributes &= ~FileAttributes.System。要理解原因:

  • ~FileAttributes.System表示“除 System之外的所有属性”(~是按位 - NOT)
  • &表示“结果是操作数两边都出现的所有属性”

所以它基本上充当了一个掩码 - 保留那些出现在(“除了系统之外的所有东西”)的属性。一般来说:

  • |=只会位添加到目标
  • &=只会从目标中移除

答案 1 :(得分:31)

a |= b相当于a = a | b,但a仅评估一次 a &= b相当于a = a & b,但a仅评估一次

要在不更改其他位的情况下删除系统位,请使用

Folder.Attributes &= ~FileAttributes.System;

~是按位否定。因此,除了系统位之外,您将所有位设置为1。 and - 使用掩码将系统设置为0并保留所有其他位完整,因为0 & x = 01 & x = x适用于任何x

答案 2 :(得分:3)

  

我想删除系统属性并保留其他属性。

你可以这样做:

Folder.Attributes ^= FileAttributes.System;