"~"在枚举前面是什么意思?

5

今天我看到了这段代码:

ViewBag.country = from p in CultureInfo.GetCultures(CultureTypes.AllCultures & ~CultureTypes.NeutralCultures)
                              select new SelectListItem
                              {
                                  Text = p.EnglishName,
                                  Value = p.DisplayName
                              };

我不明白这个代码中的波浪线"~"是否错误。据我记得,波浪线通常用在析构函数前面。但是这里是枚举类型。不过这段代码还是编译成功了。


https://dev59.com/InVD5IYBdhLWcg3wGHeu - Tim Schmelter
1
“~” 不是唯一一个有多个不相关含义的符号。还有 “*”:指针和乘法几乎没有任何关系。 - user743382
1
@CuongLe 不是这样的;在单个位级别上,0 &~ 1 => 0,而 0 ^ 1 => 1。或者以一个具体的例子来说明:3 &~ 5 => 2,3 ^ 5 => 6。在这个例子中,3 和 5 是二进制 00110101,故意选择创建一个真值表。如果 &~ 等于 ^,结果将是相同的。 - Marc Gravell
@MarcGravell:你是正确的。 - cuongle
1个回答

6
这是一个按位取反操作符。 ~ 操作符 (C# 参考) ~ 操作符对其操作数执行按位补码运算,其效果是翻转每个位。对于 int、uint、long 和 ulong,预定义了按位补码运算符。
并且,因为整数类型的操作通常允许在枚举上进行,所以您可以将 ~ 与使用上述类型作为后备的枚举一起使用。

4
对于使用了 FlagsAttribute 标记的枚举很有用(就像其他位运算符一样)。 - Oded

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接