Re: more potential janitor work: simplifying test for power of 2

Julia Lawall
2026-04-02T10:08:54Z

On Thu, 2 Apr 2026, Linus Probert wrote:

> I took a closer look at this. Many of the occurences here are actually
> used to check if a binary flag has more then one bit set. This is quite
> a common pattern.
>
> Eg. 'if (a & (a - 1))' would pass if a = 0b100, not if a = 0b110. Since:
> 0b100 - 0b001 = 0b011 -> (0b100 & 0b011) => false
> 0b110 - 0b001 = 0b101 -> (0b100 & 0b101) => true

If it's common, maybe there should be a function for it that properly
reflects the intended behavior.

julia

>
> The power of two check would 'normally' use the negation:
> 'if (!(a & (a - 1)))'
>
> Just a heads up so anyone else reading this doesn't go blindly swapping
> out this pattern for 'is_power_of_2()'.
>
> You need to apply some thinking. No 'sed' work.
>
> Br,
> Linus
>
>