为什么int和uint比较在一种情况下失败但在另一种情况下没有?

Hem*_*ant 4 .net c#

考虑以下计划:

static void Main (string[] args) {
    int i;
    uint ui;

    i = -1;
    Console.WriteLine (i == 0xFFFFFFFF ? "Matches" : "Doesn't match");

    i = -1;
    ui = (uint)i;
    Console.WriteLine (ui == 0xFFFFFFFF ? "Matches" : "Doesn't match");

    Console.ReadLine ();
}
Run Code Online (Sandbox Code Playgroud)

上述程序的输出是:

Doesn't match
Matches
Run Code Online (Sandbox Code Playgroud)

当未经检查的整数-1到无符号整数的转换是0xFFFFFFFF时,为什么第一次比较失败?(而第二个通过)

tan*_*ius 5

你的第一个比较将基于long ...因为0xFFFFFFFF不是int值:)
尝试写

Console.WriteLine( (long)i == 0xFFFFFFFF ? "Matches" : "Doesn't match" );
Run Code Online (Sandbox Code Playgroud)

你会收到一条cast is redundant消息