Quando números negativos não são considerados, para esta análise, podemos ver que quando o valor de entrada é menor que 1, esse número definitivamente não é uma potência inteira de 2.
Quando o valor de entrada é maior que um, podemos encontrar uma regra. O poder inteiro de 2 é expresso em binário como:
2d = 10b; 4d = 100b; 8d = 1000b
O primeiro bit do binário é um e o restante é zero.
Portanto, podemos julgar que, quando o valor de entrada é convertido em binário, o primeiro bit é um e os outros bits são 0, para que o valor de entrada seja uma potência inteira de 2.
No entanto, fazer isso é muito pesado. Só podemos julgar a posição de "1" no número binário pela última vez e usar a string, lastIndexOf (); método.
E também podemos descobrir que essa regra também se aplica ao caso em que a entrada 1 é inserida.
Então o código conciso surgiu.
public estático booleano ispowerOftwo (int n) {string str = Integer.tobinaryString (n); if (n <1) retornar false; else if (str.LastIndexOf ("1") == 0) retornar verdadeiro; elsereturn false; }O método Java acima para determinar se uma potência inteira de 2 é o conteúdo inteiro compartilhado pelo editor. Espero que possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.