首页 > 解决方案 > C# 中的 BigInteger.intValue() 等价物

问题描述

我正在尝试将 Java 代码翻译成 C#,但在使用 BigInteger 操作时遇到了问题。我在 C# 中找到了一些关于 BigInteger 实现和 intValue 本身的资源。但是在 C# 中没有关于 BigInteger.intValue 等价物的线索。Java中的定义是:

将此 BigInteger 转换为 int。此转换类似于 Java™ 语言规范第 5.1.3 节中定义的从 long 到 int 的缩小原语转换:如果此 BigInteger 太大而无法放入 int,则仅返回低 32 位。请注意此转换可能会丢失有关 BigInteger 值的整体大小的信息,并返回带有相反符号的结果。

但是在 C# 中使用 (int) 获得类似的结果会导致错误:

对于 Int32,值太大或太小。

我也尝试只使用低字节但没有成功如果有人帮助,将不胜感激

标签: javac#biginteger

解决方案


要获取 Java 的行为,请屏蔽值的低位并转换结果:

int result = (int) (uint) (bi & uint.MaxValue);

(这是使用隐式UInt32转换BigInteger反之则使用显式转换


推荐阅读