这感觉像是一个愚蠢的问题,但我似乎看不到答案。我有一个 UInt64,它的最大值应该是
UInt64.MaxValue 18446744073709551615
但是,当我尝试分配一个适度大小的数字时,我收到“在检查模式下编译时操作溢出”的溢出错误。如果我将它包装在“未经检查”的块中,那么它会编译并运行,就好像该变量为零一样:
UInt64 value1 = 1073741824 * 8; // Compile error CS0220
UInt64 value2 = 8589934592; // Actual value - no error
为什么会发生这种情况?
Because:
UInt64 value1 = 1073741824 * 8;
作为有符号 32 位整数进行算术,then将其转换为ulong
. Try:
UInt64 value1 = 1073741824UL * 8;
The UL
意味着文字是无符号长整型。有关文字后缀的更多信息,请参阅 C# 规范的第 2.4.4 节:
如果文字以 UL、Ul、uL、ul、LU、Lu、lU 或 lu 为后缀,则它的类型为 ulong
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)