diff options
author | Damien George <damien.p.george@gmail.com> | 2015-10-01 22:35:06 +0100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2015-10-01 22:35:06 +0100 |
commit | 2065373f67b126edfc3e0f2519aaad0956902c14 (patch) | |
tree | ecfd697b35b0bc1c883b845c1be625578deafc8f | |
parent | a81539db25d443826e5247fefda8ae73bad64056 (diff) | |
download | micropython-2065373f67b126edfc3e0f2519aaad0956902c14.tar.gz micropython-2065373f67b126edfc3e0f2519aaad0956902c14.zip |
py/mpz: Fix bignum anding of large negative with smaller positive int.
-rw-r--r-- | py/mpz.c | 8 | ||||
-rw-r--r-- | tests/basics/int_big_and.py | 2 |
2 files changed, 4 insertions, 6 deletions
@@ -239,12 +239,8 @@ STATIC mp_uint_t mpn_and_neg(mpz_dig_t *idig, const mpz_dig_t *jdig, mp_uint_t j carry >>= DIG_SIZE; } - if (carry != 0) { - *idig = carry; - } else { - // remove trailing zeros - for (--idig; idig >= oidig && *idig == 0; --idig) { - } + // remove trailing zeros + for (--idig; idig >= oidig && *idig == 0; --idig) { } return idig + 1 - oidig; diff --git a/tests/basics/int_big_and.py b/tests/basics/int_big_and.py index e0d0935a48..2dabe80ecf 100644 --- a/tests/basics/int_big_and.py +++ b/tests/basics/int_big_and.py @@ -24,3 +24,5 @@ print(-2345678901234567890123456789 & a) print((-a) & a) print((-a) & 0xffffffff) print((-a) & 0xffffffffffffffffffffffffffffffff) +print((-a) & 2) +print((-(1 << 70)) & 2) |