diff --git a/src/util/mpz.cpp b/src/util/mpz.cpp index 9b0da70fc..c56ab1667 100644 --- a/src/util/mpz.cpp +++ b/src/util/mpz.cpp @@ -1460,9 +1460,11 @@ void mpz_manager::bitwise_xor(mpz const & a, mpz const & b, mpz & c) { template void mpz_manager::bitwise_not(unsigned sz, mpz const & a, mpz & c) { SASSERT(is_nonneg(a)); - if (is_small(a) && sz <= 63) { - int64_t mask = (static_cast(1) << sz) - static_cast(1); - set_i64(c, (~ i64(a)) & mask); + if (is_small(a) && sz <= 64) { + uint64_t v = ~get_uint64(a); + unsigned zero_out = 64 - sz; + v = (v >> zero_out) << zero_out; + set(c, v); } else { mpz a1, a2, m, tmp;