Count Trailing Zeros

How to count the number of trailing zeros of an integer? The simplest way is to use the built-in function __builtin_ctz():

uint64_t count(uint64_t n) {
  return __builtin_ctz(n);
}

What will happen if we don't have __builtin_ctz()? If we have another built-in function __popcount(), which can compute the Hamming weight (the number of set bits), then we can compute the number of trailing zeros with:

uint64_t count(uint64_t n) {
  return __popcount((n & -n) - 1);
}

Note: Assume that two's complement is adopted for negation and substract, the expression (n & -n) will leave only the last set-bit in the input integer. Next, the -1 operation will set the bits lower than the last set-bit. And finally, you can get the number of trailing zeros with __popcount().

Reference