Вот еще один метод, который использует короткое замыкание с логическими операциями И и выполнением условных команд или конвейером команд.
unsigned int value;
unsigned int temp_value = value;
bool bit_found = false;
unsigned int index = 0;
bit_found = !bit_found && ((temp_value & (1 << index++)); // bit 0
bit_found = !bit_found && ((temp_value & (1 << index++)); // bit 1
bit_found = !bit_found && ((temp_value & (1 << index++)); // bit 2
bit_found = !bit_found && ((temp_value & (1 << index++)); // bit 3
//...
bit_found = !bit_found && ((temp_value & (1 << index++)); // bit 64
return index - 1; // The -1 may not be necessary depending on the starting bit number.
Преимущество этого метода в том, что нет ветвей, и конвейер команд не нарушен. Это происходит очень быстро на процессорах, которые выполняют условное выполнение инструкций.
Duplicate: http://stackoverflow.com/questions/1478023/index-of-lowest-order-bit – AakashM