首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >枚举定义中的波浪号(~)是什么?

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

Stack Overflow用户
提问于 2008-12-22 21:36:08
回答 10查看 28.6K关注 0票数 151

我总是感到惊讶的是,即使在使用C#这么长时间之后,我仍然设法找到我不知道的东西……

我试过在互联网上搜索这个,但在搜索中使用"~“对我来说效果不是很好,我在MSDN上也没有找到任何东西(并不是说它不在那里)

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

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

我看到它有点惊讶,所以我试着编译它,它起作用了…但我还是不知道这是什么意思。有什么帮助吗??

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2008-12-22 21:38:17

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

代码语言:javascript
复制
~0 = 0xFFFFFFFF = -1

在二进制补码运算中,~x == -x-1

~运算符可以在几乎任何借鉴了C语言语法的语言中找到,包括Objective-C/C++/C#/Java/Javascript。

票数 138
EN

Stack Overflow用户

发布于 2008-12-22 21:43:00

我是这么想的:

代码语言:javascript
复制
[Flags]
public enum PurchaseMethod
{
    None = 0,
    Cash = 1,
    Check = 2,
    CreditCard = 4,
    All = Cash | Check | CreditCard
 }

会更清楚一点。

票数 60
EN

Stack Overflow用户

发布于 2008-12-22 21:37:43

代码语言:javascript
复制
public enum PurchaseMethod
{   
    All = ~0, // all bits of All are 1. the ~ operator just inverts bits
    None =  0,
    Cash =  1,
    Check =  2,
    CreditCard =  4
}

由于二进制表示法中的二进制表示法中所有位都是1的数字,在C#中有两个补码。参阅~0 == -1

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/387424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档