Which is the lowest flag switched on
A permissions field packs each right into its own bit. An audit reports the position of the lowest right that is granted.
- Bits are numbered from 0, starting at the least significant end.
- Return the position of the lowest bit that is set.
- A field with nothing granted returns -1.
- The field is never negative.
lowestFlag(rights: int) → int
Go needs a compiler and Drill does not host one yet, so this page is the reference rather than an exercise: the problem, worked examples, and the solution in full. To type it out, the same problem runs in Python.
Where you start
func lowestFlag(rights int) int {
}
Worked examples
| Call | Result |
|---|---|
lowestFlag(12) | 2 |
lowestFlag(1) | 0 |
lowestFlag(0) | -1 |
lowestFlag(8) | 3 |
Hint
The expression n & -n leaves only the lowest set bit standing. Counting how far that has to shift down gives its position.
Reference solution in Go
func lowestFlag(rights int) int {
if rights == 0 {
return -1
}
position, field := 0, rights
for field&1 == 0 {
field >>= 1
position++
}
return position
}