以下两个操作是相同的。但是,MaxValues1 将不会编译,因为“在检查模式下编译时操作溢出”。有人可以解释一下编译器发生了什么,以及如何在不必使用 MaxValues2 中的硬编码值的情况下绕过它?
public const ulong MaxValues1 = 0xFFFF * 0xFFFF * 0xFFFF;
public const ulong MaxValues2 = 0xFFFD0002FFFF;
最佳答案
要获得无符号文字,请添加 u
后缀,并使它们成为 l
后缀。即你需要 ul
。
如果你真的想要溢出行为,你可以添加 unchecked
来获取 unchecked(0xFFFF * 0xFFFF * 0xFFFF)
但这可能不是你想要的。你得到溢出是因为文字被解释为 Int32
而不是 ulong
,并且 0xFFFF * 0xFFFF * 0xFFFF
不适合 32 位整数,因为它大约是 2^48。
public const ulong MaxValues1 = 0xFFFFul * 0xFFFFul * 0xFFFFul;
关于c# - 尝试在编译时分配一个大数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10021046/