考虑以下程序:
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/