这个"cast negative number to unsigned integer"成语是什么意思?



我正在研究一些代码,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)

相关内容

  • 没有找到相关文章

最新更新