C#中这个波浪线的作用是什么?

4

我正在尝试移植这段C#代码:

public static ulong WILDCARD_COLLISION_TYPE
{
    get
    {
        int parse = ~0;
        return (ulong)parse;
    }
}

如果我理解正确,~符号不是执行按位补码吗?那么做~0有什么意义呢?然后将其返回?


4
这将返回一个由64位全置位的数字值,可用作位掩码以测试某种类型的标志。 - Steve
这相当于繁琐的 int parsed = unchecked((int) 0xFFFFFFFF);,你可以直接写成 return 0xFFFFFFFFUL;,但是很容易 数错 F - Dmitry Bychenko
1个回答

8
~运算符文档中得知:

~运算符对其操作数执行位补码运算,从而反转每个位。 位补码运算符已为int,uint,long和ulong预定义。

例如:

unsigned int i = ~0;

Result: Max number I can assign to i

and

signed int y = ~0;

Result: -1

更多信息可以这样说,~0只是一个所有位都设置为1的int。当作为无符号数解释时,这将等同于UINT_MAX。当作为有符号数解释时,这将是-1


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