一尘不染

枚举定义中的波浪号(〜)是什么?

c#

我一直感到很惊讶,即使在这段时间里一直使用C#之后,我仍然设法找到了我不知道的东西…

我已经尝试过在互联网上搜索此内容,但是在搜索中使用“〜”对我来说效果不佳,我也没有在MSDN上找到任何内容(并不是说它不存在)

我最近看到了这段代码,波浪号(〜)是什么意思?

/// <summary>
/// Enumerates the ways a customer may purchase goods.
/// </summary>
[Flags]
public enum PurchaseMethod
{   
    All = ~0,
    None =  0,
    Cash =  1,
    Check =  2,
    CreditCard =  4
}

看到它令我有些惊讶,所以我尝试对其进行编译,并且它起作用了……但是我仍然不知道它的含义/作用。有帮助吗?


阅读 351

收藏
2020-05-19

共1个答案

一尘不染

〜是一元运算符的补码运算符-它翻转其操作数的位。

~0 = 0xFFFFFFFF = -1

用二进制补码算法 ~x == -x-1

在几乎所有从C借用语法的语言中都可以找到〜运算符,包括Objective-C / C ++ / C#/ Java / Javascript。

2020-05-19