这是什么意思"将负数转换为无符号整数"成语?

时间:2014-11-28 16:54:50

标签: c# casting long-integer unsigned idioms

我正在研究一些代码,并且Visual Studio编译器抱怨编译错误:将负数转换为无符号长整数。

然而,这就是原始源代码中的原理,就像这样:

var foo = new FancyMapArea((long)((ulong)-2147483648), (long)((ulong)-2147483648), 256, 256)

这可能是什么意思?如果它很愚蠢,我应该做些什么来编译它,同时仍然得到预期的结果?

更新/重要提示:

这个源代码是由ILSpy反编译器生成的,所以也许它实际上并没有被人类开发人员输入。

1 个答案:

答案 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)