| ... | @@ -88,8 +88,11 @@ static void to_twos_complement(BigInt *dest, const BigInt *op, size_t bit_count) | ... | @@ -88,8 +88,11 @@ static void to_twos_complement(BigInt *dest, const BigInt *op, size_t bit_count) |
| 88 | size_t digits_to_copy = bit_count / 64; | 88 | size_t digits_to_copy = bit_count / 64; |
| 89 | size_t leftover_bits = bit_count % 64; | 89 | size_t leftover_bits = bit_count % 64; |
| 90 | dest->digit_count = digits_to_copy + ((leftover_bits == 0) ? 0 : 1); | 90 | dest->digit_count = digits_to_copy + ((leftover_bits == 0) ? 0 : 1); |
| 91 | if (dest->digit_count == 1 && leftover_bits == 0) { | 91 | if (dest->digit_count == 1) { |
| 92 | dest->data.digit = op_digits[0]; | 92 | dest->data.digit = op_digits[0]; |
| | 93 | if (leftover_bits != 0) { |
| | 94 | dest->data.digit &= (1ULL << leftover_bits) - 1; |
| | 95 | } |
| 93 | if (dest->data.digit == 0) dest->digit_count = 0; | 96 | if (dest->data.digit == 0) dest->digit_count = 0; |
| 94 | return; | 97 | return; |
| 95 | } | 98 | } |