这个“将负数转换为无符号整数”成语是什么意思

本文关键字:无符号整数 成语 是什么 意思 转换 这个 | 更新日期: 2023-09-27 18:32:26

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