Problems › TypeScript › warmup
Count the set bits
A permissions field packs flags into an integer, and the audit log reports how many are switched on.
- Only non-negative numbers have a meaningful flag count here.
- A negative input gives -1.
countSetBits(amount: int) → int
Where you start
function countSetBits(amount: number): number {
}
Worked examples
| Call | Result |
|---|---|
countSetBits(0) | 0 |
countSetBits(7) | 3 |
countSetBits(255) | 8 |
countSetBits(1024) | 1 |
Hint
Test the lowest bit, then shift right. Or the trick: n & (n - 1) clears exactly one set bit.
Reference solution in TypeScript
function countSetBits(amount: number): number {
if (amount < 0) return -1;
let n = amount;
let bits = 0;
while (n > 0) {
n &= n - 1;
bits++;
}
return bits;
}