【发布时间】:2016-12-19 11:32:57
【问题描述】:
BigInteger 中是否有获取 2 的补码值的方法? 例如:如果有一个负值的 BigInteger
BigInteger a = new BigInteger("-173B8EC504479C3E95DEB0460411962F9EF2ECE0D3AACD749BE39E1006FC87B8", 16);
然后我想以 BigInteger 形式获得 2 的补码
BigInteger b = E8C4713AFBB863C16A214FB9FBEE69D0610D131F2C55328B641D61EFF9037848
我可以从 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 中减去第一个 BigInteger 以获得第二个 BigInteger,但是是否有通用方法来计算任何长度的 BigInteger?
【问题讨论】:
-
对不起,我没有答案,但你到底在用这个做什么?
-
我们在 Android 和 iOS 上都遵循一个协议。在 iOS 中,BIGNUM 产生一个 +ve 数字,但在 Android 中,BigInteger 显示一个 -ve 数字(2 的补码)。我们需要匹配这两个值以进行计算。
-
你为什么要使用 BigInteger 呢?我认为这更多是协议解析器的问题。我建议您编辑您的问题并添加信息和代码,说明您收到的数据、解析方式以及之后的处理方式。
-
错误,
BigInteger.negate()?这是一个谜吗? -
BigInteger.negate() 只是改变符号但值没有改变。
标签: java android biginteger twos-complement negative-number