考虑下面的程序:为什么int和uint比较在一种情况下失败,而在另一种情况下不能?
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的第一比较失败? (而第二个通过)
不,是为0xFFFFFFFF一个uint值...只是尝试:'0xFFFFFFFF.GetType()。Name' – 2010-03-05 13:33:18
@Thomas:好的,你说得对。重点是:它不是int ...编辑 – tanascius 2010-03-05 13:36:07
在i == 0xFFFFFFFF上有一个编译器警告,说“比较到整数值没用,常量在int的范围之外”。所以@tanascius说。 – btlog 2010-03-05 14:09:31