Comment puis-je vérifier si un entier est pair ou impair en utilisant des opérateurs au niveau du bit
Comment puis-je vérifier si un entier est pair ou impair en utilisant des opérateurs au niveau du bit
Vous devez vous connecter pour publier un commentaire.
En C (et la plupart des C-comme langues)
Considérer ce que "pair" et "impair" signifie "peu" conditions. Depuis entier binaire de données est stocké à l'aide de bits indiquant les multiples de 2, l'ordre le plus bas de bits correspond à 20, qui est bien sûr 1, alors que tous les autres bits correspondent à des multiples de 2 (21 = 2, 22 = 4, etc.). Gratuituous ASCII art:
J'ai seulement montré 8 bits, mais vous obtenez l'idée.
De sorte que vous pouvez dire si un entier est pair ou impair en ne regardant que l'ordre le plus bas bit: S'il est défini, le nombre est impair. Si non, il est encore. Vous n'avez pas de soins sur les autres bits parce qu'ils dénotent des multiples de 2, et donc ils ne peuvent pas prendre la valeur impaire.
La façon vous regardez le bit est par l'utilisation de l'opérateur ET de votre langue. En C et en plusieurs autres langues du point de vue syntaxique dérivée de B (oui, B), que l'opérateur est
&
. Dans les Bases, il est généralementAnd
. Vous prenez votre entier, ET 1 (qui est un nombre avec seulement l'ordre le plus bas bit), et si le résultat n'est pas égal à 0, le bit a été défini.Je suis volontairement pas donne le code ici, non seulement parce que je ne sais pas quelle est la langue que vous utilisez, mais parce que vous avez marqué à la question "devoirs". 🙂
Par exemple, prenons nombre entier 25, qui est impair.
En binaire 25 est
00011001
. Notez que le bit le moins significatif b0 1.Juste une note de bas de page à Jim de réponse.
En C#, contrairement au C, au niveau du bit ET retourne le nombre qui en résulte, donc, que vous aimeriez écrire:
number & 1
serait de retour, soit 0 ou 1. Si en C# vous écrireif (8)
par exemple, n'est pas le8
évaluer àtrue
?if
peut fonctionner sur n'importe quel type intégral en C mais pas en C# qui est différent, pas le résultat de l'opérateur au niveau du bit.8 & 1
donnera la valeur 0 comme résultat. Toutefois, en C, une instruction if sera jeté 0 pour faux, et tout nombre différent de zéro à la valeur true.&
retourne un entier au moins comme de large, de typeint
- pas le C type booléen_Bool
. Détail: dans le cadre de laif(x)
, six
compare égal à0
, leif()
branche n'est pas pris. IAC,if (number & 1)
etif ((number & 1) == 1)
va générer le même code sur un bon compilateur - il n'y a pas de différence fonctionnelle.Exemples:
Donc 9 ET 1 nous donne 1, comme le droit de la plupart des bits de chaque nombre impair est 1.
De 14 ET 1 nous donne 0, comme le droit de la plupart des bits de chaque nombre est égal à 0.
Vous pouvez le faire simplement en utilisant bit à bit ET
&
de l'opérateur.Lire plus ici - La vérification de même bizarre à l'aide de l'opérateur bit à bit en C
Aussi en Java, vous devrez utiliser
if((number&1)==1){//then odd}
, car en Java et C# comme langues de laint
n'est pas coulé àboolean
. Vous devrez utiliser les opérateurs relationnels pour revenirun
boolean
valeur que j'ai.etrue
etfalse
contrairement au C et C++ comme les langues qui traite de la non-valeur de zéro commetrue
.