考虑以下程序:

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 ();
}

上述程序的输出为:
Doesn't match
Matches

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

最佳答案

您的第一次比较将基于 longs ... 因为 0xFFFFFFFF 不是 int 值 :)
试着写

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

你会收到一条 cast is redundant 消息

关于c# - 为什么 int 和 uint 比较在一种情况下会失败,而在另一种情况下不会?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2387000/

10-09 03:10