Dupliqué possible: strong>
Comment vérifier si un numéro est un pouvoir de 2 p>Je veux déterminer si un numéro est dans p>
1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384 ... code> p>
J'ai essayé ceci: p>
xxx pré> Comme vous pouvez le voir , il retourne
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ... code> p>
Comment dois-je rendre efficacement l'impression ci-dessus pour être
0 code> pour tous, y compris 1? p> blockQuote>
9 Réponses :
Depuis le premier résultat est impair, vous obtiendrez vous besoin d'imprimer un moyen primitif de faire ce sera: p > 1 code>, car il est juste après que vous le multipliez par 2, vous obtiendrez toujours
0 code>.
résultat code> si vous souhaitez obtenir la liste des pouvoirs de 2. p>
public static void Main(string[] args)
{
int result = 1;
int numToCheck = 141234;
boolean found = false;
for (int i = 0; i < 15; i++)
{
if (numToCheck == result) {
found = true;
break;
}
result *= 2;
}
if(found) Console.WriteLine("Awesome");
}
Ce que je veux, c'est juste pour déterminer si résultat code> est de la séquence binaire
1, 2, 4, 8 code> etc.
Il ne veut pas écrire cette liste que je semble, mais de savoir si un nombre donné fait partie de cette séquence, mais c'est tout à fait difficile à comprendre compte tenu de son code.
Vous faites exactement ça. Le résultat est de 1 en première exécution, puis 2, puis 4, puis 8, puis 16, puis 32, puis 64, etc.
Et si le numéro à vérifier est supérieur à 2 ^ 15?
@ Øyvindknobloch-Bråthen - Il s'agit d'un exemple primitif seulement, j'ai essayé de faire clairement l'idée. ne pas fournir une mise en œuvre complète.
@BinyAMINSharet - Pour ne pas être de critiquer ici, mais il a demandé une solution efficace, vous devriez au moins arrêter de rechercher lorsque vous avez trouvé votre réponse, et ne réalisez pas les 15 itérations complètes, peu importe. Ajout d'une pause après le réglage trouvé sur True devrait être en place ici :)
@ Øyvindknobloch-Bråthen - Vous avez absolument raison. Je voulais l'ajouter mais j'ai oublié :)
c'est correct. 1 0 0 0 0 0 est la bonne séquence. Le résultat est de 1 dans la première boucle. 1% 2 est 1. Ensuite, Résultat * = 2 donne résultat la valeur 2. Dans la balcle suivante 2% 2 = 0. Résultat * = 2 est 4. 4% 2 est 0. 4 * = 2 est compris. Le résultat est toujours multiplié par 2, il conserve d'être dans les pouvoirs de 2 rangées et donc des opérations de mod de SLA avec 2 résultat à 0. Donc, tout va bien avec ce code. P>
Ce que vous n'êtes pas un test si le numéro est dans la séquence, mais il s'agit d'un générateur de ces numéros ... seule la partie d'impression contient une sorte d'essai ...
Essayez ce code pour un test : p> Le code ci-dessus prend un argument de commande de commande et le teste pour être dans la séquence binaire en fonction du critère que vous avez publié ... Si c'est ainsi qu'il imprime 1, sinon elle imprime 0. p> p>
Cela semble être une bonne solution :) +1
Votre code imprimera uniquement des séquences binaires. Comme vous appliquez le mod 2. Donc, vous obtiendrez 0 ou 1. Il sera donc imprimé dans une séquence binaire. p>
L'expression suivante doit être vraie si i code> est dans votre séquence. p>
(i & (i-1)) == 0) code> p>
C'est un site vraiment utile à connaître.
@zapthentingbat, Yep. C'est exactement ce que je cherchais.
Vous pouvez déterminer si un numéro est une puissance de 2 (dont 2 ^ 0) à l'aide de la méthode suivante: ici , vous pouvez lire pourquoi et comment cela fonctionne. P> P>
Woops, vrai. Je l'ai complètement mal, mettra à jour. ... Fait.
J'utiliserais x> = 0 code>, donc tous les nombres négatifs sont rejetés. Ou lancez un
argumentoutofrangeException code> si
x <0 code>.
@CodeInchaos Merci, modifié en conséquence. Comme une alternative, vous pouvez utiliser un paramètre de type uint code>.
Boolean result = false; Int32 numberToTest = 64; Int32 limit = 15; for (int i = 0; i < limit && !result; i++) { if (Math.Pow(2, i).Equals(numberToTest)) { result = true; } } Console.WriteLine(String.Format("Number {0} {1} a power of 2.", numberToTest, result ? "is" : "is not"));
Que diriez-vous de quelque chose comme ça? Ceci n'a pas de limite spécifique sur le numéro à vérifier, mais s'assure qu'il arrête de vérifier si le numéro à vérifier augmente que le nombre réel que nous " en essayant de décider si est dans la séquence binaire. P> p>
C'est un peu de hack, mais cela fonctionne ... Il semble que vous ne demandiez que si un seul bit dans la représentation binaire du nombre est un 1 p> p>
Pourquoi la couleur est-elle mélangée dans une méthode vérifiant si un numéro est dans une série de numéros spécifique?
parce que c'est un exemple et je pensais que cela contribuerait à souligner lorsque la condition a été satisfaite
Je n'ai pas lu correctement ici il semble. Vous ne vous êtes pas vu régler la console avant-plan. Alors ça me semble bien :)
Oui je peux voir cela. Quelque chose ne va pas?
Je sais que le code fonctionne comme prévu. Ma question est de savoir quel code écrire à imprimer ce que i b> attendre.
@Codeinchaos, j'ai voté moi-même de le fermer. Merci pour la référence.
Pour des questions de violence, il y a souvent une réponse à: www-graphiques.stanford .Edu / ~ Seander / ...