可能的重复:
.Net 中的 Int128?

当我决定在 C# 中实现 Int128 后,我认为让它看起来像其他 dotNet 数据类型会很好。但我无法实现以下功能:

  • 后缀初始化:如13L和0.2D

我可以在 C# 中创建自己的后缀吗?
如果我不能..我怎样才能初始化它?
IE

Int128 a= ??
有帮助吗?

解决方案

您无法创建自己的后缀初始值设定项 - 这是语言的一部分并嵌入到编译器中。另一方面,如果您编写自己的 C# 编译器,则可以做任何您想做的事情并以您希望的方式扩展它。

至于如何初始化它——这取决于你如何编写它。如果它是一个类,则需要使用以下命令对其进行初始化 new 关键字,或者编写一些到精度较低的数字类型的隐式转换。

正如乔恩指出的,您将无法实际将其设置为大于 ulong.MaxValue 没有一些字符串操作。您还必须以某种形式在内部表示(字符串?一些 ulongs?)并确保所有转换和操作正常工作(溢出怎么办?)。

其他提示

不,您无法在 C# 中创建自己的文字形式。

可以 有一个隐式转换 int, long, uintulong, ,允许:

Int128 a = 100;

但你不能指定大于 ulong.MaxValue 那样。

有一个隐式转换 decimal 将允许更大的范围,但这将是一个坏主意,因为您将丢失任何不仅仅是整数的值的数据。

基本上没有什么可以允许文字保证为整数的值大于 ulong.MaxValue - 你可以解析一个字符串,但这并不是很理想。或者你可以创建一个构造函数 ulongs,一种用于底部 64 位,一种用于顶部 64 位。

不,您不能进行后缀初始化。即将推出的 C++ 标准将提供这种可爱之处……但我离题了。

最明显的选择是 Int128(long hi, ulong lo)Int128(string).

您可以查看 4.0 中新的 BigInteger 结构以获取有关初始化的提示。 http://msdn.microsoft.com/en-us/library/system.numerics.biginteger.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top