|= 用于 位 运算,
位(bit)是电子计算机中最小的数据单位。每一位的状态只能是0或1。
也就是说,位组合起来就是二进制。
| 代表位运算里的 按位或(OR)
按位或 处理两个长度相同的二进制数,两个相应的二进位中只要有一个为1,该位的结果值为1。
贴学习中的一段代码,这段代码的意思就是根据路径去隐藏文件夹。
bool hide(string path)
{
if (path != string.Empty)
{
DirectoryInfo dir = new DirectoryInfo(path);
dir.Attributes |= FileAttributes.System;
dir.Attributes |= FileAttributes.Hidden;
return true;
}
return false;
}
在这段代码中,FileAttributes 是可以代表符合状态的枚举, 注:带有"[flags]位域"的枚举可以用来表达多种复合的状态,可以用 "或(|)"运算符进行组合, 每个位域的枚举都不能是前几项值的复合值,通常用2的n次方来代表位域枚举。
位的运算:
按位或:
规则:
1|1=1
1|0=1
0|1=1
0|0=0
参与运算的两数各对应的二进位,只要有一个是1,结果位就为1,
参与运算的两个数均以补码出现。
例如:9|5可写算式如下: 00001001|00000101 00001101 (十进制为13)可见9|5=13。
static void Main(string[] args)
{
int a = 5;
int b = 9;
var c = a | b;
Console.WriteLine($"a={a},b={b},c={c}");
Console.ReadKey();
}
结果是:13;
按位与:
和上述 按位或 的规则相反,例如:1&1=1;0&1=0;1&0=0;0&0=0;参与运算的两个数也都是以补码出现,如果把上述代码内的|改为&,那么结果就是1。
按位异或(XOR),在C#里用 ^ 来表示:
参与运算的两数各对应的二进位,如果不相同,则为1,如果相同,则为0, 参与运算的两个数均以补码出现。 如果把上述代码内的|改为&,那么结果就是12。
取反(NOT),在C#里用 ~ 来表示:
对每一位参与运算的二进制字符进行取反操作,为0则变为1,为1则变为0。例如: ~2 = -3;
好,我们继续位的运算,上述代码 dir.Attributes |= FileAttributes.System; 的意思是: dir.Attributes = dir.Attributes| FileAttributes.System