diff --git a/src/util/util.h b/src/util/util.h index 189629e7f2..ae39e96a37 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -103,9 +103,9 @@ static inline unsigned next_power_of_two(unsigned v) { /** \brief Return the position of the most significant bit. */ -static inline unsigned log2(int v) { return std::bit_width((unsigned)v) - 1; } -static inline unsigned log2(unsigned v) { return std::bit_width(v) - 1; } -static inline unsigned log2(uint64_t v) { return std::bit_width(v) - 1; } +static inline unsigned log2(int v) { return v > 0 ? (std::bit_width(static_cast(v)) - 1) : 0; } +static inline unsigned log2(unsigned v) { return v ? (std::bit_width(v) - 1) : 0; } +static inline unsigned log2(uint64_t v) { return v ? (std::bit_width(v) - 1) : 0; } static_assert(sizeof(unsigned) == 4, "unsigned are 32 bits");