关于c#:| =(单管道相等)和& =(单个&符号相等)是什么意思

What does |= (single pipe equal) and &=(single ampersand equal) mean

在以下几行中:

1
2
3
4
5
6
//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中,|=&=是什么意思?#我想删除系统属性并保留其他属性…


它们是复合赋值运算符,翻译(非常松散)

1
x |= y;

进入之内

1
x = x | y;

&也是如此。在一些情况下,关于隐式强制转换有更多的细节,并且目标变量只被计算一次,但这基本上就是它的要点。

对于非复合运算符,&是位"and",|是位"or"。

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

  • ~FileAttributes.System是指"除System以外的所有属性"(~是位非)
  • &表示"结果是操作数两边的所有属性"

所以它基本上是一个遮罩-只保留那些出现在("除了系统之外的所有东西")中的属性。一般来说:

  • |=将只向目标添加位。
  • &=只会从目标中删除位。


  • |是位或
  • &是按位和

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

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

1
Folder.Attributes &= ~FileAttributes.System;

~是位否定。这样,除系统位外,所有位都将设置为1。由于任何x0 & x = 01 & x = x,用屏蔽将系统设置为0并保持所有其他位不变。


I want to remove system attribute with keeping the others..

您可以这样做:

1
Folder.Attributes ^= FileAttributes.System;