diff options
Diffstat (limited to '')
| -rw-r--r-- | src/ztrunc.c | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/src/ztrunc.c b/src/ztrunc.c index e1a330c..3dedaba 100644 --- a/src/ztrunc.c +++ b/src/ztrunc.c @@ -5,7 +5,6 @@ void ztrunc(z_t a, z_t b, size_t bits) { - zahl_char_t mask = 1; size_t chars; if (unlikely(zzero(b))) { @@ -14,20 +13,17 @@ ztrunc(z_t a, z_t b, size_t bits) } chars = CEILING_BITS_TO_CHARS(bits); - a->sign = b->sign; a->used = MIN(chars, b->used); if (unlikely(a->used < chars)) bits = 0; if (likely(a != b)) { + a->sign = b->sign; ENSURE_SIZE(a, a->used); zmemcpy(a->chars, b->chars, a->used); } bits = BITS_IN_LAST_CHAR(bits); - if (likely(bits)) { - mask <<= bits; - mask -= 1; - a->chars[a->used - 1] &= mask; - } + if (likely(bits)) + a->chars[a->used - 1] &= ((zahl_char_t)1 << bits) - 1; TRIM_AND_ZERO(a); } |
