我正在研究一些代码,并且Visual Studio编译器抱怨编译错误:将负数转换为无符号长整数。
然而,这就是原始源代码中的原理,就像这样:
var foo = new FancyMapArea((long)((ulong)-2147483648), (long)((ulong)-2147483648), 256, 256)
这可能是什么意思?如果它很愚蠢,我应该做些什么来编译它,同时仍然得到预期的结果?
更新/重要提示:
这个源代码是由ILSpy反编译器生成的,所以也许它实际上并没有被人类开发人员输入。
答案 0 :(得分:2)
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)