RFR: 8356891: Some code simplifications in BigInteger [v22]

Raffaello Giulietti rgiulietti at openjdk.org
Tue May 27 17:27:56 UTC 2025


On Tue, 27 May 2025 17:14:32 GMT, fabioromano1 <duke at openjdk.org> wrote:

>> src/java.base/share/classes/java/math/BigInteger.java line 4732:
>> 
>>> 4730:         /* Allocate output array.  If all non-sign ints are 0x00, we must
>>> 4731:          * allocate space for one extra output int. */
>>> 4732:         for (i = a.length - 1; i >= keep && a[i] == 0; i--) // Skip trailing zeros
>> 
>> I think there's no need to check for `i >= keep`.
>> Suggestion:
>> 
>>         for (i = a.length - 1; a[i] == 0; i--) // Skip trailing zeros
>
> @rgiulietti Because the method assumes that `a` represents a two's complement negative integer, so there is at least a sign bit?

There's only one usage of `makePositive(int[])`, and only when `a[0] < 0`.
And then there's the method comment that assumes a negative 2's complement number in `a`.

But if you don't feel sure, I don't mind keeping the line as it is.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/25166#discussion_r2109770395


More information about the core-libs-dev mailing list