# How can I do modulo with a bitmask in C?

Are you doing `i % n`

, where `n`

is a power of two? There’s a neat alternative way to do that: `i & (n-1)`

. See how it works by choosing `n == 8`

, so `i % 8`

is the same as `i & 7`

. `7`

is `0b111`

, so `i & 0b111`

removes all but the three least significant bits. For instance, `14 % 8 == 6`

. But `14 & 7 == 0b1110 & 0b0111 == 0b0110 == 0b110 = 6`

.

For example, you might use this when implementing a ring buffer with power-of-two length.

### More by Jim

- Project C-43: the lost origins of asymmetric crypto
- How Hacker News stays interesting
- My parents are Flat-Earthers
- The dots do matter: how to scam a Gmail user
- The sorry state of OpenSSL usability
- I hate telephones
- The Three Ts of Time, Thought and Typing: measuring cost on the web
- Granddad died today
- Your syntax highlighter is wrong

I wrote this because I felt like it. This post is not associated with my employer. Found an error? Edit this page.