我正在研究一些代码,Visual Studio编译器抱怨编译错误:将负数转换为无符号长整数。
但是,这就是原始源代码中的方式,就像这样:
var foo = new FancyMapArea((long)((ulong)-2147483648), (long)((ulong)-2147483648), 256, 256)
这样做的意图可能是什么?如果这很愚蠢,我应该怎么做才能编译它,同时仍然得到预期的结果?
更新/重要说明:
此源代码是由 ILSpy 反编译器生成的,因此可能它实际上不是由人类开发人员键入的。
ulong
不应该存储有符号整数值。因为它不使用最后一位来存储整数的符号值。您必须使用unchecked
关键字才能使用类似的东西,这将使您获得值的环绕行为
string a = aaa.ToString();
ulong b = ulong.MaxValue; //18446744073709551615
unchecked
{
b = (ulong)(-20); //18446744073709551596
}
总而言之,如果您最终要转换为long
则完全删除中间转换为ulong
。
var foo = new FancyMapArea((long)(-2147483648), (long)(-2147483648), 256, 256)