有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java BigInteger加法看起来不正确

我有两个字节的数组,我正试图添加使用

BigInteger n1=new BigInteger(byte[] a1);
BigInteger n2=new BigInteger(byte[] a2);
BigInteger sum=a1.add(a2);
byte[] as=sum.toByteArray();

这就是我得到的:

a1=4A4A3E502602CE0C3D1792D5A2C6BADFE701E5C668FBE1D92F19923CD2A5143B
a2=FFE735AE9FB702A6C08D3ED57CB6CCF7CBB74F6F8D3F820A837A9775AF953F0D
as=4A3173FEC5B9D0B2FDA4D1AB1F7D87D7B2B93535F63B63E3B29429B2823A5348

从最高有效字节来看,0x4A和0xFF的相加会产生一个丢失的进位。我希望加上两个32字节的整数会得到一个33字节的整数(这种情况下是因为有进位)


共 (1) 个答案

  1. # 1 楼答案

    BigInteger是有符号的

    仅考虑最重要的字节:

    0x4A + 0xFF = 74 + -1 = 73 = 0x49 + 1 (carry from previous byte) = 0x4A
    

    为了快速解决这个问题,我在两个数组中都添加了一个最重要的零

    004A4A3E502602CE0C3D1792D5A2C6BADFE701E5C668FBE1D92F19923CD2A5143B
    00FFE735AE9FB702A6C08D3ED57CB6CCF7CBB74F6F8D3F820A837A9775AF953F0D
    014A3173FEC5B9D0B2FDA4D1AB1F7D87D7B2B93535F63B63E3B29429B2823A5348