Como verificar se um número é uma potência de dois em C#?
Olá a todos! Sou novo em C# e me deparei com uma tarefa: preciso escrever um método que verifica se um número inteiro é uma potência de dois (1, 2, 4, 8, 16, 32, etc.). Parece uma tarefa simples, mas não consigo pensar em uma solução elegante.
Até agora escrevi este código:
```csharp
public static bool IsPowerOfTwo(int n)
{
if (n <= 0) return false;
while (n > 1)
{
if (n % 2 != 0) return false;
n = n / 2;
}
return true;
}
```
Ele parece funcionar, mas acho que é muito verboso e ineficiente. Ouvi dizer que existe uma maneira esperta com bitwise operations, mas não entendo como funciona. Vocês podem sugerir uma solução mais correta e rápida?
Estou especialmente interessado em:
1. Como fazer a verificação sem loops?
2. O que são bitwise operations e como aplicá-las?
3. Existem métodos embutidos no .NET para isso?
4. Como lidar com números negativos e zero?
Agradeço desde já pela ajuda! O código deve funcionar no .NET Core, se isso for importante.